<?xml version='1.0' encoding='utf-8' ?>
<feed xmlns='http://www.w3.org/2005/Atom'>
  <title type='text'>Arbor Web Solutions</title>
  <generator uri='http://effectif.com/nesta'>Nesta</generator>
  <id>tag:www.arborwebsolutions.com,2009:/</id>
  <link href='http://www.arborwebsolutions.com/articles.xml' rel='self' />
  <link href='http://www.arborwebsolutions.com' rel='alternate' />
  <subtitle type='text'>We bring beautiful, accessible websites to life.</subtitle>
  <updated>2012-02-27T16:03:00+00:00</updated>
  <entry>
    <title>WYSIWYG Considered Harmful</title>
    <link href='http://www.arborwebsolutions.com/articles/wysiwyg-considered-harmful' rel='alternate' type='text/html' />
    <id>tag:www.arborwebsolutions.com,2012-02-27:/articles/wysiwyg-considered-harmful</id>
    <content type='html'>
      &lt;p&gt;If you attended my &lt;a href=&quot;http://www.arborwebsolutions.com/articles/wordcamp-miami-2012&quot;&gt;WordCamp Miami 2012 presentation&lt;/a&gt;, then you already know my thoughts on the WordPress visual editor: every time we show it to a user, we are telling them a lie. The visual editor's interface looks like Microsoft Word, and users know how to use Word. They know that in Word, if you want to change the way something looks, you just highlight it with the mouse and make your changes. Word doesn't have a notion of &quot;meaning&quot; for parts of your document (unless you are a fairly advanced Word user, which is perhaps 1% of the people who use Word on a regular basis).&lt;/p&gt;
      
      &lt;p&gt;The problem with the visual editor looking like Word is that it is &lt;em&gt;not&lt;/em&gt; Word. On the Web, content (HTML) and presentation (CSS) are separate. &lt;em&gt;&lt;strong&gt;The way content is written actually has meaning&lt;/strong&gt;&lt;/em&gt;. And when our users enter content for their sites, whether they use the visual editor or not, that content will at some point be transformed into HTML markup.&lt;/p&gt;
      
      &lt;p&gt;Mandy Brown (&lt;a href=&quot;http://twitter.com/aworkinglibrary&quot;&gt;@aworkinglibrary&lt;/a&gt;) has been releasing a series of articles lately on the content industry, and I was quite pleased to see that her thoughts on the subject mirror my own:&lt;/p&gt;
      
      &lt;blockquote&gt;&lt;p&gt;It’s time content people of all stripes recognized the WYSIWYG editor
      for what it really is: not a convenient shortcut, but a dangerous
      obstacle placed between you and the actual content. Because content on
      the web is going to be marked up one way or another: you either take
      control of it or you cede it to the software, but you can’t avoid it.
      WYSIWYG editors are fine for amateurs, but if you are an editor, or
      copywriter, or journalist, or any number of the kinds of people who work
      with content on the web, you cannot afford to be an amateur.&lt;/p&gt;&lt;/blockquote&gt;
      
      &lt;p&gt;Mandy suggests learning HTML:&lt;/p&gt;
      
      &lt;blockquote&gt;&lt;p&gt;Fortunately, there’s a plus side to all this: HTML is easy to learn.
      Even if you never peeked at the source for a website, never so much as
      authored an anchor tag, you already know most of the principles behind
      it, because they emerged from the texts themselves. You do need to learn
      a new syntax—a new way of expressing what the text means. But syntax is
      where editors excel.&lt;/p&gt;&lt;/blockquote&gt;
      
      &lt;p&gt;&lt;em&gt;(Source link: &lt;a href=&quot;http://aworkinglibrary.com/library/archives/markup/&quot;&gt;a working library: Markup&lt;/a&gt;)&lt;/em&gt;&lt;/p&gt;
      
      &lt;p&gt;While it is true that HTML is a new way of expressing familiar ideas for authors and editors, the average WordPress user is neither. That's why I recommend teaching your users &lt;a href=&quot;http://daringfireball.net/projects/markdown&quot;&gt;Markdown&lt;/a&gt; instead - the &quot;meaning&quot; of the text is still hidden from your user, but you separate their content from its presentation. The only way to &quot;emphasize&quot; something in Markdown is to use Markdown syntax; no changing the font-size from a dropdown or giving it a different color.&lt;/p&gt;
      
      &lt;p&gt;In either case, WYSIWYG editors are not doing us or our users any favors. Unless your users steadfastly refuse to try something new, turn off the visual editor in WordPress and put your users on the path to better Web content.&lt;/p&gt;
    </content>
    <published>2012-02-27T16:03:00+00:00</published>
    <updated>2012-02-27T16:03:00+00:00</updated>
    <category term='articles'></category>
  </entry>
  <entry>
    <title>On Making Stuff</title>
    <link href='http://www.arborwebsolutions.com/journal/on-making-stuff' rel='alternate' type='text/html' />
    <id>tag:www.arborwebsolutions.com,2012-02-24:/journal/on-making-stuff</id>
    <content type='html'>
      &lt;blockquote&gt;&lt;p&gt;when you don't create things, you become defined by your tastes rather
      than ability. your tastes only narrow &amp;amp; exclude people. so
      create.&lt;/p&gt;&lt;/blockquote&gt;
      
      &lt;p&gt;&lt;em&gt;why the lucky stiff&lt;/em&gt; (on Twitter, before he/she deleted his/her account)&lt;/p&gt;
    </content>
    <published>2012-02-24T09:28:00+00:00</published>
    <updated>2012-02-24T09:28:00+00:00</updated>
    <category term='journal'></category>
  </entry>
  <entry>
    <title>Structured Content in WordPress</title>
    <link href='http://www.arborwebsolutions.com/articles/wordcamp-miami-2012' rel='alternate' type='text/html' />
    <id>tag:www.arborwebsolutions.com,2012-02-18:/articles/wordcamp-miami-2012</id>
    <content type='html'>
      &lt;p&gt;Thank you to everyone who came to my &lt;a href=&quot;http://2012.miami.wordcamp.org&quot;&gt;WordCamp Miami 2012&lt;/a&gt; talk today on structured content. Here are some links and resources if you want to learn more:&lt;/p&gt;
      
      &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;Slides&lt;/strong&gt;. You can find the exact website I used to give my presentation today at &lt;a href=&quot;http://wcmia.arborwebsolutions.com&quot;&gt;wcmia.arborwebsolutions.com&lt;/a&gt;. You'll need a relatively recent browser (Safari 4+, Chrome, Firefox 9+, IE 9+, maybe Opera 11.60; does not work on mobile / tablet browsers) to see all of the animations.&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Structured content&lt;/strong&gt;. The concept of structured content comes from the broader field of &lt;em&gt;content strategy&lt;/em&gt;. If you want to know more about content strategy, look for books and blog posts by practitioners like Karen McGrane (mentioned in my talk), Kristina Halvorson, or Erin Kissane.&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Magic Fields&lt;/strong&gt;. I was using Magic Fields 2. You can add Magic Fields to your own site through the Plugins part of your admin (just click &quot;Add new plugin&quot;, search for &quot;Magic Fields&quot;, and install &quot;Magic Fields 2&quot;). You can get documentation for Magic Fields at their site, &lt;a href=&quot;http://magicfields.org&quot;&gt;magicfields.org&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Search Everything&lt;/strong&gt;. Again, you can install Search Everything through the Plugins section of your admin site.&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Markdown&lt;/strong&gt;. The canonical source of information on Markdown is creator Jon Gruber's site, &lt;a href=&quot;http://daringfireball.net/projects/markdown&quot;&gt;Daring Fireball&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Markdown on Save&lt;/strong&gt;. Install this plugin by (wait for it…) searching for it through the Plugins section of your admin site. You may also want to try Markdown on Save Improved; the &quot;improved&quot; part is making Markdown the default entry method.&lt;/li&gt;
      &lt;/ul&gt;
      
      
      &lt;p&gt;Finally, if you attended my talk this afternoon, please take a moment to leave me some feedback at &lt;a href=&quot;http://spkr8.com/t/9285&quot;&gt;SpeakerRate&lt;/a&gt;. I'd really appreciate it!&lt;/p&gt;
      
      &lt;p&gt;Thanks again, and I hope you all enjoyed this year's WordCamp Miami!&lt;/p&gt;
    </content>
    <published>2012-02-18T15:00:00+00:00</published>
    <updated>2012-02-18T15:00:00+00:00</updated>
    <category term='articles'></category>
  </entry>
  <entry>
    <title>On Making Your Own Olympics</title>
    <link href='http://www.arborwebsolutions.com/journal/on-making-your-own-olympics' rel='alternate' type='text/html' />
    <id>tag:www.arborwebsolutions.com,2012-02-06:/journal/on-making-your-own-olympics</id>
    <content type='html'>
      &lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;Assuming we will always have the Olympics, could you suggest a better way of doing them?&lt;/strong&gt;&lt;/p&gt;
      
      &lt;p&gt;Why assume that? If you want to run and jump, go do it in a field for
      free. If you want to run and jump with a Kenyan or a Croatian, go out and
      find one – there are plenty around my way – and go and run and jump
      together in a field. Costs nothing. You may even make a few bob by
      charging people to watch you.&lt;/p&gt;&lt;/blockquote&gt;
      
      &lt;p&gt;&lt;em&gt;Will Self,&lt;/em&gt; &quot;The Olympics Suck&quot;, &lt;em&gt;&lt;a href=&quot;http://www.epigram.org.uk/2012/01/will-self-interview-the-olympics-suck/&quot;&gt;Bristol University Student Newspaper&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
    </content>
    <published>2012-02-06T11:20:00+00:00</published>
    <updated>2012-02-06T11:20:00+00:00</updated>
    <category term='journal'></category>
  </entry>
  <entry>
    <title>On Working in Academia (and Blogging)</title>
    <link href='http://www.arborwebsolutions.com/journal/on-working-in-academia-and-blogging' rel='alternate' type='text/html' />
    <id>tag:www.arborwebsolutions.com,2012-01-30:/journal/on-working-in-academia-and-blogging</id>
    <content type='html'>
      &lt;blockquote&gt;&lt;p&gt;The prof in charge of my research project offered me a spot in his lab, a
      tuition waiver, and a &lt;em&gt;whole $12,000 dollars&lt;/em&gt; as a stipend if I would commit
      4~6 years to him.  That’s a great deal if, and only if, you have recently
      immigrated from a low-wage country and need someone to intervene with the
      government to get you a visa.&lt;/p&gt;
      
      &lt;p&gt;If you really like the atmosphere at universities, that is cool.  Put a
      backpack on and you can walk into any building at any university in the
      United States any time you want.  Backpacks are a lot cheaper than working
      in academia. You can lead the life of the mind in
      industry, too — and enjoy less politics and better pay.  You can even
      get published in journals, if that floats your boat.  (After you’ve
      escaped the mind-warping miasma of academia, you might rightfully
      question whether Published In A Journal is really personally or
      societally significant as opposed to close approximations like Wrote
      A Blog Post And Showed It To Smart People.)&lt;/p&gt;&lt;/blockquote&gt;
      
      &lt;p&gt;&lt;em&gt;Patrick McKenzie, &lt;a href=&quot;http://www.kalzumeus.com/2011/10/28/dont-call-yourself-a-programmer/&quot;&gt;Don't Call Yourself a Programmer, and Other Career Advice&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
    </content>
    <published>2012-01-30T14:50:00+00:00</published>
    <updated>2012-01-30T14:50:00+00:00</updated>
    <category term='journal'></category>
  </entry>
  <entry>
    <title>Dieter Rams' 10 principles of good web design</title>
    <link href='http://www.arborwebsolutions.com/journal/dieter-rams-10-principles-of-good-web-design' rel='alternate' type='text/html' />
    <id>tag:www.arborwebsolutions.com,2012-01-25:/journal/dieter-rams-10-principles-of-good-web-design</id>
    <content type='html'>
      &lt;p&gt;I couldn't have said this any better than .net Magazine. This list is golden.&lt;/p&gt;
      
      &lt;p&gt;&lt;a href=&quot;http://m.netmagazine.com/features/dieter-rams-10-principles-good-web-design&quot;&gt;Dieter Rams' 10 principles of good web design&lt;/a&gt;&lt;/p&gt;
    </content>
    <published>2012-01-25T11:00:00+00:00</published>
    <updated>2012-01-25T11:00:00+00:00</updated>
    <category term='journal'></category>
  </entry>
  <entry>
    <title>Using Alternating Classes in Sinatra Templates</title>
    <link href='http://www.arborwebsolutions.com/articles/using-alternating-classes-in-sinatra-templates' rel='alternate' type='text/html' />
    <id>tag:www.arborwebsolutions.com,2012-01-25:/articles/using-alternating-classes-in-sinatra-templates</id>
    <content type='html'>
      &lt;p&gt;When I started working on this site's redesign, I made a conscious decision to try to make my markup as lean as possible. I was going to use all the new HTML5 semantic elements, and if a CSS selector could get to the item I needed, I would try to avoid using a class or id on an element. So I wrote a lot of style rules like this one:&lt;/p&gt;
      
      &lt;pre&gt;&lt;code&gt;:::css&amp;#x000A;.services ol li:nth-child(4) {&amp;#x000A;    /* do stuff here */&amp;#x000A;}&amp;#x000A;&lt;/code&gt;&lt;/pre&gt;
      
      &lt;p&gt;&lt;code&gt;:nth-child&lt;/code&gt; is incredibly helpful, but there's a problem: it's not supported in Internet Explorer 8 and below. Yes, IE6 is practically dead, and IE9 is the new shiny hotness, but IE7 and IE8 still make up a sizable percentage of web users that few websites can afford to ignore. What to do?&lt;/p&gt;
      
      &lt;p&gt;The answer is to go back to older ways of accomplishing the same result - namely, by adding more classes and ids to your elements to provide styling hooks.&lt;/p&gt;
      
      &lt;h3&gt;A digression on zebra striping.&lt;/h3&gt;
      
      &lt;p&gt;This brings us to one of the more common uses for &lt;code&gt;:nth-child&lt;/code&gt;. One way to enhance the readability of a table is to use alternating background colors on each row, so that the eye can more easily scan a table from left to right. With CSS3, this is easy to accomplish:&lt;/p&gt;
      
      &lt;pre&gt;&lt;code&gt;:::css&amp;#x000A;table tr:nth-child(even) {&amp;#x000A;    background: #ccc;&amp;#x000A;}&amp;#x000A;table tr:nth-child(odd) {&amp;#x000A;    background: #eee;&amp;#x000A;}&amp;#x000A;&lt;/code&gt;&lt;/pre&gt;
      
      &lt;p&gt;But the scourge of old IE raises its ugly head again - no support for &lt;code&gt;:nth-child&lt;/code&gt;. So we need a way to add class names like &lt;code&gt;.even&lt;/code&gt; and &lt;code&gt;.odd&lt;/code&gt; to each &lt;code&gt;&amp;lt;tr&amp;gt;&lt;/code&gt;.&lt;/p&gt;
      
      &lt;h3&gt;Programming to the rescue&lt;/h3&gt;
      
      &lt;p&gt;Adding all those class names to your markup yourself is a pain. Thankfully, programmers are good at being lazy and there are a number of ways to make the server do all the work for you.&lt;/p&gt;
      
      &lt;p&gt;My pages are using &lt;a href=&quot;http://haml-lang.com&quot;&gt;Haml&lt;/a&gt;, so I needed to find a solution in Ruby. Searching the internet, I quickly found this approach:&lt;/p&gt;
      
      &lt;pre&gt;&lt;code&gt;:::haml&amp;#x000A;%tr{ :class =&amp;gt; cycle('odd', 'even') }&amp;#x000A;&lt;/code&gt;&lt;/pre&gt;
      
      &lt;p&gt;But using this approach in Sinatra doesn't work, because &lt;code&gt;cycle&lt;/code&gt; here is a Rails function, and we're not using Rails, so the interpreter throws a small fit because it can't find the function definition. Again, what to do?&lt;/p&gt;
      
      &lt;p&gt;Just like before, we go back to older ways of doing things. Here is the code I ended up using:&lt;/p&gt;
      
      &lt;pre&gt;&lt;code&gt;:::haml&amp;#x000A;- even = true&amp;#x000A;- for page in pages&amp;#x000A;    - even = !even&amp;#x000A;    %tr{ :class =&amp;gt; even ? 'even' : 'odd' }&amp;#x000A;&lt;/code&gt;&lt;/pre&gt;
      
      &lt;p&gt;I set up a variable, &lt;code&gt;even&lt;/code&gt;, and set it to true. Then, on each trip through the loop, I change &lt;code&gt;even&lt;/code&gt; to the opposite value. I add a class to my &lt;code&gt;&amp;lt;tr&amp;gt;&lt;/code&gt; with the &lt;em&gt;ternary operator&lt;/em&gt;, &lt;code&gt;?&lt;/code&gt;. This tests the value of &lt;code&gt;even&lt;/code&gt;, and if it is true, adds class 'even', and if not, adds class 'odd'. The result is zebra striping in old versions of Internet Explorer!&lt;/p&gt;
    </content>
    <published>2012-01-25T07:48:00+00:00</published>
    <updated>2012-01-25T07:48:00+00:00</updated>
    <category term='articles'></category>
  </entry>
  <entry>
    <title>Better. Faster. Stronger.</title>
    <link href='http://www.arborwebsolutions.com/journal/better-faster-stronger' rel='alternate' type='text/html' />
    <id>tag:www.arborwebsolutions.com,2012-01-23:/journal/better-faster-stronger</id>
    <content type='html'>
      &lt;p&gt;About four months ago, I &lt;a href=&quot;http://www.arborwebsolutions.com/journal/text-editors-in-lion-and-a-quick-update&quot;&gt;wrote&lt;/a&gt; about my plans to move Arbor Web Solutions from WordPress to Blogofile. Well, as always happens, new solutions presented themselves as I was working. What you are reading now is the new Arbor Web Solutions, rebuilt from the ground up and running on &lt;a href=&quot;http://nestacms.com&quot;&gt;NestaCMS&lt;/a&gt;.&lt;/p&gt;
      
      &lt;p&gt;Nesta leverages the power of &lt;a href=&quot;http://sinatrarb.com&quot;&gt;Sinatra&lt;/a&gt;, a Ruby-based DSL for web applications, to create a hybrid between fully-dynamic site engines like &lt;a href=&quot;http://wordpress.org&quot;&gt;WordPress&lt;/a&gt; and static site generators like &lt;a href=&quot;http://jekyllrb.com/&quot;&gt;Jekyll&lt;/a&gt;. Pages and posts are just text files, marked up using a language like Markdown or Haml. Those text files are run through a template on demand and served up as web pages.&lt;/p&gt;
      
      &lt;p&gt;Why did I move to this setup? Basically, it fits my workflow and preferences better than the WordPress site I was using previously. All my content is in plain text files that are easily searchable and back-uppable (in my case, on &lt;a href=&quot;https://github.com/kzurawel/aws2012&quot;&gt;Github&lt;/a&gt;), and I can make and edit posts from any device with a text editor and an internet connection. That means I get &lt;em&gt;full&lt;/em&gt; access to every aspect of my blogging system from both iPad and iPhone.&lt;/p&gt;
      
      &lt;p&gt;If you've visited this site before, you will probably notice a few differences. First, the old site's &quot;articles&quot; have been split into two categories - Articles and Journal. Articles will be the home of tutorials, how-tos, and more in-depth writing on specific topics. Journal, where this post is located, will contain site news, brief posts on a variety of topics, quotes, and links.&lt;/p&gt;
      
      &lt;p&gt;Second, I have removed comments from this site. Before you get worked up about this, I would like to offer a compromise. If you would like your comments listed on this site, write your response on any publicly-available forum - your own blog, Twitter, Google+, you name it - and send me a link. I will add the link to your reply on the relevant page of my site.&lt;/p&gt;
      
      &lt;p&gt;Finally, the new site should be fully functional in the majority of web browsers out there - including mobiles, tablets, and desktops. However, there are some known issues viewing this site in Internet Explorer. Rest assured that I am resolving these bugs as quickly as possible, and that while some parts of this site may look less than attractive, the entire site is functional in all browsers.&lt;/p&gt;
      
      &lt;p&gt;That is all for now. I will be writing a series of articles on the technologies underlying this new site and how it came to be over the next few weeks.&lt;/p&gt;
      
      &lt;p&gt;Thank you for reading this, and I hope you will visit regularly!&lt;/p&gt;
    </content>
    <published>2012-01-23T20:13:00+00:00</published>
    <updated>2012-01-23T20:13:00+00:00</updated>
    <category term='journal'></category>
  </entry>
  <entry>
    <title>On Learning to Play Guitar</title>
    <link href='http://www.arborwebsolutions.com/journal/on-learning-to-play-guitar' rel='alternate' type='text/html' />
    <id>tag:www.arborwebsolutions.com,2012-01-18:/journal/on-learning-to-play-guitar</id>
    <content type='html'>
      &lt;blockquote&gt;&lt;p&gt;It's not how many years you've been playing that matters - it's how many hours.&lt;/p&gt;&lt;/blockquote&gt;
      
      &lt;p&gt;&lt;em&gt;Merlin Mann&lt;/em&gt;&lt;/p&gt;
    </content>
    <published>2012-01-18T13:33:00+00:00</published>
    <updated>2012-01-18T13:33:00+00:00</updated>
    <category term='journal'></category>
  </entry>
  <entry>
    <title>Triple Dare (CSSOff 2011)</title>
    <link href='http://www.arborwebsolutions.com/portfolio/cssoff-2011' rel='alternate' type='text/html' />
    <id>tag:www.arborwebsolutions.com,2011-11-20:/portfolio/cssoff-2011</id>
    <content type='html'>
      &lt;p&gt;For the 2011 &lt;a href=&quot;http://unmatchedstyle.com&quot;&gt;UnmatchedStyle&lt;/a&gt; CSSOff competition, the designers at Paravel created this single-page design for a fictional TV show, &quot;Triple Dare&quot;. Contestants in the CSSOff had to convert a PSD of the design into a fully-working site, with a panel of judges scoring each contestant on the quality of their markup, its usability and appearance across multiple devices and browsers, total file size and more.&lt;/p&gt;
      
      &lt;p&gt;In approaching this challenge, I started with a mobile re-design of the layout, progressively adding styling to end up at the design as provided. CSS3 allowed me to size images appropriately for every screen size, and heavily-optimized 8-bit PNG images provided small file sizes (as well as transparency support in Internet Explorer 6). I used CSS3 3D transforms to create fun interactive effects, and a small amount of JavaScript to animate the countdown timer at the bottom of the page.&lt;/p&gt;
      
      &lt;p&gt;The result is a fast-loading site that is extremely light on file size, making for a site that works well on everything from a mobile phone to a widescreen TV.&lt;/p&gt;
    </content>
    <published>2011-11-20T12:00:00+00:00</published>
    <updated>2011-11-20T12:00:00+00:00</updated>
    <category term='portfolio'></category>
  </entry>
</feed>

