<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
   <title>Authentic Boredom</title>
   <link rel="alternate" type="text/html" href="http://cameronmoll.com/" />
   <link rel="self" type="application/atom+xml" href="http://cameronmoll.com/atom.xml" />
   <id>tag:cameronmoll.com,2008://1</id>
   <updated>2008-05-02T12:51:42Z</updated>
   
   <generator uri="http://www.sixapart.com/movabletype/">Movable Type 3.33</generator>

<entry>
   <title>Recent job listings</title>
   <link rel="alternate" type="text/html" href="http://cameronmoll.com/archives/2008/05/recent_job_listings/" />
   <id>tag:cameronmoll.com,2008://1.817</id>
   
   <published>2008-05-02T12:50:00Z</published>
   <updated>2008-05-02T12:51:42Z</updated>
   
   <summary> Last week following my session at An Event Apart, a gentleman stopped me in the hall to shake hands and say, &quot;Thank you.&quot; His story, neither spectacular nor banal, was one of fulfillment: Having lost his job a year...</summary>
   <author>
      <name></name>
      
   </author>
   
   
   <content type="html" xml:lang="en" xml:base="http://cameronmoll.com/">
      <![CDATA[<p>
Last week following my session at <a href="http://aneventapart.com/">An Event Apart</a>, a gentleman stopped me in the hall to shake hands and say, "Thank you." His story, neither spectacular nor banal, was one of fulfillment: Having lost his job a year ago, he soon found employment in Georgia through a listing on Authentic Jobs. He's still at the company today, and shaking the hand of someone whom the site has positively affected is tremendously rewarding for me. (Is your next job in <a href="http://authenticjobs.com/jobs/2202/">Georgia</a>?)</p>

<p>
Some recent listings are highlighted below.</p>

<p class="no-indent">
<strong>Full-time (International)</strong></p>
<ul>
	<li><strong class="jl">South London</strong> <a href="http://authenticjobs.com/jobs/2217/">Web Designer</a> <span class="at">at</span> <span class="employer">Down2Earth</span></li>
	<li><strong class="jl">Stockholm</strong> <a href="http://authenticjobs.com/jobs/2189/">Java-utvecklare</a> <span class="at">at</span> <span class="employer">Unikum - Unikt lärande AB</span></li>
	<li><strong class="jl">Rotterdam</strong> <a href="http://authenticjobs.com/jobs/2157/">Senior Interactive Designer</a> <span class="at">at</span> <span class="employer">Studio Dumbar</span></li>
</ul>

<p class="no-indent">
<strong>Full-time (U.S.)</strong></p>
<ul>
	<li><strong class="jl">Anywhere</strong> <a class="newpost" href="http://authenticjobs.com/jobs/2243/">CSS Zen Master</a> <span class="at">at</span> <span class="employer">SmugMug</span></li>
	<li><strong class="jl">Work from home</strong> <a href="http://authenticjobs.com/jobs/2180/">Code Mechanic</a> <span class="at">at</span> <span class="employer">EllisLab, Inc.</span></li>
	<li><strong class="jl">Cupertino, CA</strong> <a href="http://authenticjobs.com/jobs/2231/">iCal Software Engineer</a> <span class="at">at</span> <span class="employer">Apple Inc.</span></li>
	<li><strong class="jl">Cupertino, CA</strong> <a class="newpost" href="http://authenticjobs.com/jobs/2238/">UI Engineer</a> <span class="at">at</span> <span class="employer">Apple Inc.</span></li>
	<li><strong class="jl">Los Angeles, CA</strong> <a class="newpost" href="http://authenticjobs.com/jobs/2241/">Web Designer / Client-Side Developer</a> <span class="at">at</span> <span class="employer">Casting Networks, Inc</span></li>
	<li><strong class="jl">Los Angeles, CA</strong> <a class="newpost" href="http://authenticjobs.com/jobs/2235/">User Interface Engineer</a> <span class="at">at</span> <span class="employer">Synctree</span></li>
	<li><strong class="jl">Palo Alto, CA</strong> <a href="http://authenticjobs.com/jobs/2227/">Graphic Designer</a> <span class="at">at</span> <span class="employer">Facebook</span></li>
	<li><strong class="jl">Redwood Shores, CA</strong> <a href="http://authenticjobs.com/jobs/2208/">Visual Designer / Production Designer</a> <span class="at">at</span> <span class="employer">Navigenics</span></li>
	<li><strong class="jl">Jacksonville, FL</strong> <a href="http://authenticjobs.com/jobs/2216/">Multimedia Design</a> <span class="at">at</span> <span class="employer">City of Jacksonville</span></li>
	<li><strong class="jl">Laurel, MD</strong> <a href="http://authenticjobs.com/jobs/2218/">Web Project Manager</a> <span class="at">at</span> <span class="employer">LMD</span></li>
	<li><strong class="jl">Brentwood, TN--Near Nashville</strong> <a class="newpost" href="http://authenticjobs.com/jobs/2242/">Flash Expert Wanted</a> <span class="at">at</span> <span class="employer">DaveRamsey.com, Top 5,000 US ranked website</li>
	<li><strong class="jl">Chattanooga, TN</strong> <a href="http://authenticjobs.com/jobs/2211/">E-Commerce / Social Networking Developer</a> <span class="at">at</span> <span class="employer">MNDCreative, LLC</span></li>
	<li><strong class="jl">Brooklyn, NY</strong> <a class="newpost" href="http://authenticjobs.com/jobs/2240/">Interaction Designer</a> <span class="at">at</span> <span class="employer">HUGE</span></li>
	<li><strong class="jl">New York, NY</strong> <a href="http://authenticjobs.com/jobs/2224/">Web Designer</a> <span class="at">at</span> <span class="employer">Polar News Company</span></li>
	<li><strong class="jl">Provo, Utah</strong> <a href="http://authenticjobs.com/jobs/2225/">Web Developer</a> <span class="at">at</span> <span class="employer">BYU - Harold B. Lee Library</span></li>
	<li><strong class="jl">Bellevue, WA</strong> <a href="http://authenticjobs.com/jobs/2214/">Social Application User Experience &amp; User Interaction Designer</a> <span class="at">at</span> <span class="employer">Livemocha</span></li>
</ul>

<p class="no-indent">
<strong>Freelance</strong></p>
<ul>
	<li><a href="http://authenticjobs.com/jobs/2234/">FLEX Developer</a> <span class="at">at</span> <span class="employer">TEKsystems</span></li>
	<li><a href="http://authenticjobs.com/jobs/2222/">Senior Web Developer</a> <span class="at">at</span> <span class="employer">Liquid Digital Media</span></li>
	<li><a href="http://authenticjobs.com/jobs/2219/">Social job site needs web designer with emphasis on User Experience</a> <span class="at">at</span> <span class="employer">BizFavors</span></li>
</ul>

<p>
Speaking of freelance listings, the very same day the gentleman stopped me in the hall, I received this email from Katrina McKinnon of <a href="http://motivemedia.com.au/">Motive Media</a> (Australia):</p>

<blockquote>I posted a freelance position on your site yesterday for 75 bucks. Within these few hours I have received a hundred or so responses -- a few of them exceptional, most of them good and only a few absolute duds. That's quite possibly the best 75 I've spent for a while. Thanks for making the service you made. I appreciate it.</blockquote>

<p>Post a job or find one at <a href="http://authenticjobs.com/">Authentic Jobs</a>.</p>
]]>
      
   </content>
</entry>
<entry>
   <title>Craziest thing you&apos;ve done for user research?</title>
   <link rel="alternate" type="text/html" href="http://cameronmoll.com/archives/2008/04/user_research/" />
   <id>tag:cameronmoll.com,2008://1.804</id>
   
   <published>2008-04-23T15:29:42Z</published>
   <updated>2008-04-23T15:39:08Z</updated>
   
   <summary>Me? I signed up as a full-fledged Tupperware rep for two months. At a former company, we delivered web-based marketing tools to distributors and consultants of network marketing companies. One of our biggest (and best) clients was Tupperware, purveyor of...</summary>
   <author>
      <name></name>
      
   </author>
   
   
   <content type="html" xml:lang="en" xml:base="http://cameronmoll.com/">
      <![CDATA[<p>Me? I signed up as a full-fledged Tupperware rep for two months.</p>

<p>At a former company, we delivered web-based marketing tools to distributors and consultants of network marketing companies. One of our biggest (and best) clients was <a href="http://tupperware.com/">Tupperware</a>, purveyor of all things plastic. We were in the midst of a major upgrade to the software they licensed from us, and I figured the best way to understand our/their users was to become one of them.</p>

<p>So, with the permission of the company, I became a part-time Tupperware rep. I sold product online, I attended a really wacky rally with women screaming wildly about Tupperware as adrenaline-infusing tunes such as "We Will Rock You" boomed loudly from on-stage speakers, and I even handled a return from a mildly disgruntled customer who found me merely because I was the nearest rep in town.</p>

<p>In the end, I can honestly say I understood the user much better than before -- even as embarrassing as it may have been for me. (Though I happily admit I safely escaped holding any Tupperware parties at home.)</p>

<p>You? Can you top that?</p>]]>
      
   </content>
</entry>
<entry>
   <title>Techniques for designing with type characters</title>
   <link rel="alternate" type="text/html" href="http://cameronmoll.com/archives/2008/04/designing_with_type_characters/" />
   <id>tag:cameronmoll.com,2008://1.790</id>
   
   <published>2008-04-15T17:46:44Z</published>
   <updated>2008-04-16T02:52:51Z</updated>
   
   <summary> After weeks of code speak, let&apos;s totally shift gears and talk exclusively about visual design in all its splendor and beauty. Typography and typefaces, without a doubt, are two of the most fascinating aspects of visual design. Great designers...</summary>
   <author>
      <name></name>
      
   </author>
   
   
   <content type="html" xml:lang="en" xml:base="http://cameronmoll.com/">
      <![CDATA[<p>
After weeks of code speak, let's totally shift gears and talk exclusively about visual design in all its splendor and beauty.</p>

<p>
Typography and typefaces, without a doubt, are two of the most fascinating aspects of visual design. Great designers can execute great designs with typefaces and nothing else, if required, and certainly if preferred. Design legends Saul Bass and Paula Scher have proved this many times over, and they comprise only a fraction of a very long list of luminaries who can wield type brilliantly.</p>

<p>
Examples of great design using little more than typography are virtually numberless. Some of the favorites I've spotted recently include designs by John Arnor G. Lom, Coudal Partners, and NB:Studio, linked respectively:</p>

<div class="snap"><a href="http://twistedintellect.com/" style="border-bottom: 0;"><img class="picC" src="/img/pics/type-twisted.gif" alt="Twisted Intellect" width="367" height="252" /></a></div>

<div class="snap"><a href="http://seedconference.com/" style="border-bottom: 0;"><img class="picC" src="/img/pics/type-seed.gif" alt="Seed Conference" width="367" height="251" /></a></div>

<div class="snap"><a href="http://www.nbstudio.co.uk/londonskerning/detail.html" style="border-bottom: 0;"><img class="picC" src="/img/pics/type-london.gif" alt="Illustration showing map of London" width="367" height="244" /></a></div>

<p>But of all the work I've seen recently, few have captured my attention as much as that of Veer's <a href="http://www.veer.com/products/merchdetail.aspx?image=VPR0005460">Type City Prints</a>. "Each portrays an urban facet, illustrated character by character with a typeface that evokes the image itself," Veer's website explains. "Illustrations are letterpressed onto archival, acid-free paper using brass dies mounted type high."</p>

<div class="snap"><a href="http://www.veer.com/products/merchdetail.aspx?image=VPR0005460" style="border-bottom: 0;"><img class="picC" src="/img/pics/type-veer.jpg" alt="Veer's Type City Prints" width="367" height="367" /></a></div>

<p>Absolutely stunning.</p>

<p>
Inspired by Veer's work, I had the privilege of creating a Type City-esque design of my own for an in-house poster contest. Designed in tribute to one of the buildings that adorn the organization's headquarters (and one of the most compelling edifices in the state), the entire design was created solely with characters from the Bickham Script Pro and Engravers MT typefaces.</p>

<div class="snap"><a href="http://www.flickr.com/photos/authentic/2313495216/" style="border-bottom: 0;"><img class="picC" src="/img/pics/typeilly.jpg" alt="Illustration of an edifice designed solely with type" width="367" height="275" /></a></div>
<div class="snap"><a href="http://www.flickr.com/photos/authentic/2193213563/" style="border-bottom: 0;"><img class="picC" src="/img/pics/typeilly2.gif" alt="Detail shot showing edifice designed with type" width="367" height="275" /></a></div>

<p>I'll speak more about the design soon, but for now I wanted to share a few things learned during my first attempt to design with type characters. Luckily, in the course of my project, I was fortunate enough to correspond with Veer's <strong>Justin Lafontaine</strong>, the talented designer behind the Type City Prints. <em>(<strong>Correction:</strong> Christina Huber's artwork is also featured in the set. Thanks Anders!)</em> Below is shared knowledge from our experiences.</p>

<p><strong>1. Use characters from the subject's description.</strong> What better starting point and technique for conveying meaning than to use characters from the name of the building, location, object, or person? "The first thing I did was spell out the phrase, such as locations for the buildings, and copied it a few times at varying sizes in both upper and lowercase," Justin explains. "This gives you a really good palette to start from which you can quickly grab different sizes depending on what you need." (Regrettably, I learned about this tip only after I had made substantial progress, and therefore my design uses random characters and lacks that extra bit of meaning I could have given it.)</p>

<p><strong>2. Take advantage of symmetry for both speed and beauty.</strong> For objects or buildings that are symmetrical, use symmetry to your advantage for creating the design with less effort. As Justin describes, "I usually built one side, then flipped it to complete the building." As a result, symmetry also enhances the aesthetics of your work. "The symmetry in these can be pretty beautiful."</p>

<p><strong>3. Scale the characters to convey perspective.</strong> Justin: "In lots of them I used the scale of the characters to give the illusion of
perspective, like larger characters closer to you, and smaller as they become further away. That helped a lot!"</p>

<p><strong>4. Repeat sections whenever possible.</strong> This is probably the most important tip. You'll find sections of the piece which you've meticulously built can be copied and pasted elsewhere in the design, and the duplicated section isn't really perceptible without closer inspection. This is a real time saver. "All you need to do is some minor swapping, and it looks like a totally new texture," Justin adds.</p>

<p><strong>5. Don't attempt this in one sitting.</strong> I take it back -- <em>this</em> is the most important tip. Not only is type character designing extremely time consuming, it's also monotonous work that requires a constant zoom in, zoom out dance to get things right. My design required a total of about 16 hours to complete. That's just two full-time days worth of work, but don't even attempt to do it two days back to back. Spread it out over a couple weeks to allow adequate time for correction, detailing, and simply to give yourself a break. (Mine was spread over three weeks.)</p>

<p>
In retrospect, type character designing isn't for the faint of heart, but it's extremely gratifying if executed well. (A big thanks to Justin Lafontaine for sharing his advice!)</p>]]>
      
   </content>
</entry>
<entry>
   <title>Swissmiss, SimpleBits, Big Noob join Authentic Jobs</title>
   <link rel="alternate" type="text/html" href="http://cameronmoll.com/archives/2008/04/swissmiss_simplebits_bignoob_join_authentic_jobs/" />
   <id>tag:cameronmoll.com,2008://1.781</id>
   
   <published>2008-04-07T15:53:24Z</published>
   <updated>2008-04-07T15:57:07Z</updated>
   
   <summary> I&apos;m very pleased to announce Authentic Jobs has added three new partners: Swissmiss, SimpleBits, and The Big Noob, all of which now aggregate Authentic Jobs listings on their sites. Swissmiss If my header image is any indication, it should...</summary>
   <author>
      <name></name>
      
   </author>
   
   
   <content type="html" xml:lang="en" xml:base="http://cameronmoll.com/">
      <![CDATA[<p>
I'm very pleased to announce Authentic Jobs has added three new partners: <a href="http://swissmiss.typepad.com/">Swissmiss</a>, <a href="http://simplebits.com/">SimpleBits</a>, and <a href="http://thebignoob.com/">The Big Noob</a>, all of which now aggregate Authentic Jobs listings on their sites.</p>

<p class="no-indent"><strong>Swissmiss</strong></p>
<div class="snap"><a href="http://swissmiss.typepad.com/" style="border-bottom: 0;"><img class="picC" src="/img/pics/aj-swissmiss.gif" alt="Swissmiss" width="367" height="74" /></a></div>
<p>
If my <a href="http://cameronmoll.com/img/swiss.jpg">header image</a> is any indication, it should come as no surprise that I'm a fan of all things Swiss. (This is in part due to my being one-quarter Swiss, three-quarters Whoknowswhat.) However, selection for new partners isn't based on personal preference but instead quality of content. And Tina Roth Eisenberg's site has it in spades, with multiple daily postings covering an eclectic range of interestingness.</p>

<p class="no-indent"><strong>SimpleBits</strong></p>
<div class="snap"><a href="http://simplebits.com/" style="border-bottom: 0;"><img class="picC" src="/img/pics/aj-simplebits.gif" alt="SimpleBits" width="367" height="74" /></a></div>
<p>
Credentialed Dan Cederholm needs little introduction. Author, speaker, and occasional <a href="http://www.simplebits.com/notebook/2004/11/30/dodgeball.html">dodgeball superstar</a>, I couldn't be happier to have Dan join the team.</p>

<p class="no-indent"><strong>The Big Noob</strong></p>
<div class="snap"><a href="http://thebignoob.com/" style="border-bottom: 0;"><img class="picC" src="/img/pics/aj-bignoob.gif" alt="The Big Noob" width="367" height="74" /></a></div>
<p>
Proprietors of all things geek (and great design), Brad Smith, Ryan Sims, and Keegan Jones render it honorable for one <a href="https://www.cottyn.com/shirts/im_a_noob">to be labeled "Noob"</a>. Welcome aboard, guys.</p>]]>
      
   </content>
</entry>
<entry>
   <title>Extensible CSS Interface IV: Testing for Extensibility</title>
   <link rel="alternate" type="text/html" href="http://cameronmoll.com/archives/2008/04/extensible_css_interface_testing_extensibility/" />
   <id>tag:cameronmoll.com,2008://1.768</id>
   
   <published>2008-04-01T16:25:54Z</published>
   <updated>2008-04-01T16:28:08Z</updated>
   
   <summary> This series is sponsored by Authentic Jobs, a freelance and full-time job board for web professionals. This is the fourth and final article in the four-part series, &quot;The Highly Extensible CSS Interface&quot;. Markup and images for this article: View...</summary>
   <author>
      <name></name>
      
   </author>
   
   
   <content type="html" xml:lang="en" xml:base="http://cameronmoll.com/">
      <![CDATA[<div class="download" style="line-height: 140%; font-style: italic;">
	This series is sponsored by <a href="http://authenticjobs.com/" title="Full-time and freelance job board">Authentic Jobs</a>, a freelance and full-time job board for web professionals.
</div>
<p>
This is the fourth and final article in the four-part series, <a href="/archives/2008/02/the_highly_extensible_css_interface_the_series/">"The Highly Extensible CSS Interface"</a>. Markup and images for this article:</p>
<ul>
	<li><a href="/articles/widget/">View the full demo</a></li>
	<li><a href="/articles/widget/demo.zip">Download demo.zip (all files)</a></li>
</ul>
<div class="snap"><a href="/articles/widget/" style="border-bottom: 0;"><img class="picC" src="/img/pics/widget.jpg" alt="The Highly Extensible CSS Interface" width="367" height="399" /></a></div>

<div class="snap"><a href="/articles/extensible-css/" style="border-bottom: 0;"><img class="picC" src="/img/pics/extensible-site.jpg" alt="Site for the Extensible CSS series" width="367" height="384" /></a></div>

<p>
Finally, we've arrived. This concluding article provides the full demo, as well as a <a href="/articles/extensible-css/">bookmarkable site</a> that gives you quick access to all resources mentioned throughout the series.</p>

<p>Additionally, what follows below are <strong>8 benchmarks to measure the extensibility of your site or app.</strong> I certainly don't advocate that every site or app must comply with all of these benchmarks, but I do recommend trying to comply as best as possible with each of these when applicable to your project.</p>

<h3 class="article-sub">1. Translation</h3>
<div class="snap"><img class="picC" src="/img/pics/test-translate.jpg" alt="The interface translated in Chinese" width="367" height="180" /></div>

<p>
When I sat down to author this article, translation of all things was the first to come to mind. I suppose that's because it's been on my mind not only at work but increasingly as I realize just how global our economy is becoming.</p>

<p>
Perhaps the easiest way to test for translation is to send your prototype through <a href="http://www.google.com/translate_t">Google Translate</a>. Here's what the demo looks like <a href="http://tinyurl.com/2eedtn">translated to Chinese (Simplified)</a>. Fortunately, a fringe benefit of <a href="http://www.simplebits.com/publications/bulletproof/">bulletproofing</a> is that elements containing text are inherently capable of accommodating changes to the length of the text that occur as a result of translation.</p>

<p>
However, bulletproofing alone isn't always enough, as we must make smart choices about what will be image text and will not be as we design the layout. In the <a href="/articles/widget/">demo</a>, only one phrase in the entire interface is image text -- the logo. The rest is HTML text. This was done specifically to make translation as easy possible, sparing ourselves from having to create a set of graphics with translated image text for every language our fictitious app may be translated into.</p>

<p>
In the end, you'll have to decide on image text vs. HTML text based on the translation needs of your site or app, on how much typographic control needs to be retained through imagery and how much can be relegated to browser rendering, and so forth.</p>

<h3 class="article-sub">2. Text Resizing</h3>
<div class="snap"><img class="picC" src="/img/pics/test-resize.jpg" alt="The interface with larger text" width="367" height="180" /></div>

<p>
This benchmark is fairly straightforward: Make it work for low-vision users, whose default text size may be different than yours. 
A general recommendation is to accommodate up to two sizes larger. You can also accommodate text sizes smaller than the default, but my opinion is that if a user chooses to go smaller than default, he or she accepts that things may not be legible anyway.</p>

<p>
Testing for text resizing is pretty easy: Command/Ctrl + (in most browsers), and then analyze how elements containing text accommodate changes in text size. And if you'd like to explore an interesting technique for having the entire interface resize (not just text elements), check out Jon Tan's <a href="http://jontangerine.com/log/2007/09/the-incredible-em-and-elastic-layouts-with-css">Em &amp; Elastic Layouts with CSS</a>.</p>
<h3 class="article-sub">3. Resolution Dependence</h3>
<div class="snap"><img class="picC" src="/img/pics/test-resolution.jpg" alt="The interface at large and small widths" width="367" height="180" /></div>

<p>
I've talked about resolution dependence extensively throughout the series, so I won't elaborate further other than to suggest you check out Richard Rutter's list of resolution dependence techniques, which he refers to as <a href="http://clagnut.com/blog/1663/">variable fixed width layout</a>. 

<h3 class="article-sub">4. Images Disabled</h3>
<div class="snap"><img class="picC" src="/img/pics/test-images.jpg" alt="The interface with images disabled" width="367" height="180" /></div>

<p>
This one's an easy step to overlook. Be sure to test how your layout renders in the absence of images, not only for reasons of accessibility but also to <strong>be sure background images have a supporting background color.</strong> In the example above, the Featured Member section is created with dark background images and white text. If I'd forgotten to add a dark background color, even though it's not visible when background images are present, I'd leave users with white text on white background when images are disabled.</p>

<h3 class="article-sub">5. Styling &amp; Scripts Disabled</h3>
<div class="snap"><img class="picC" src="/img/pics/test-styles.jpg" alt="The interface with styling disabled" width="367" height="180" /></div>

<p>
Disabling styling and scripts tells us if we've separated presentation and structure properly, which yields a variety of benefits, not the least of which are accessibility and alternate device rendering (e.g. mobile).</p>

<p>
As <a href="http://cameronmoll.com/archives/2008/03/extensible_css_interface_css_selectors_jquery/#029575">Dan Mall pointed out</a> in Part II, the goal as it pertains to scripting is <a href="http://www.onlinetools.org/articles/unobtrusivejavascript/">unobtrusive JavaScript</a>, or the separation of JavaScript from the markup and CSS layers.</p>

<p>
Two Firefox plugins for not only easily disabling images, styles, and scripts but also for inspecting and manipulating markup on the fly are the <a href="https://addons.mozilla.org/en-US/firefox/addon/60">Web Developer Toolbar</a> and <a href="http://getfirebug.com/">Firebug</a>. I recommend you install both. Additionally, there's the <a href="http://tinyurl.com/dkmm9">IE Developer Toolbar</a> (IE 6 and 7) and <a href="http://webkit.org/blog/108/yet-another-one-more-thing-a-new-web-inspector/">Safari Web Inspector</a>.</p>

<h3 class="article-sub">6. Color Contrast</h3>
<div class="snap"><img class="picC" src="/img/pics/test-color.jpg" alt="The interface showing a test for color blindness" width="367" height="180" /></div>

<p>
When you consider roughly 8% of the male population is color blind, you quickly realize a significant chunk of your user audience may have difficulty using your site if color contrast isn't properly tested. (As an interesting aside, I've had at least one color-blind designer on my team for nearly the entire length of my career.)</p>

<p>
The utility I prefer to use for quickly assessing how color-blind users will see my interface is <a href="http://colororacle.cartography.ch/">Color Oracle</a>. It's free, very lightweight, and allows you to test color blindness in any software or window on your machine. Also give Pabini Gabriel-Petit's thorough article a read: <a href="http://www.uxmatters.com/MT/archives/000164.php">Ensuring Accessibility for People With Color-Deficient Vision</a>.</p>

<h3 class="article-sub">7. Rebranding</h3><div class="snap"><img class="picC" src="/img/pics/test-rebrand.jpg" alt="The interface with an alternate branding scheme" width="367" height="180" /></div>

<p>
Those of you who develop software that is licensed to other companies who in turn rebrand your software as their own will know what I'm talking about here. Inherent in the practice of web standards -- and the practice of extensibility -- is the ability to "reskin" an interface fairly easily.</p>

<p>
To see what I mean, uncomment the following line of code in the demo to see a simple rebranding of the interface:</p>

<pre><code>&#60;link rel="stylesheet" href="css/branding.css" type="text/css" /&gt;</pre></code>

<p>
Again, this rebranding is rather minimal, but the point here is that by properly separating structure and presentation, changing the skin of an interface is relatively easy. Of course, you can really reskin the same markup by changing the CSS rather wildly, as demonstrated by the <a href="http://www.csszengarden.com/">css Zen Garden</a> project. My example pales in comparison, but hopefully you get the point.</p>

<h3 class="article-sub">8. Mobile </h3>
<div class="snap"><img class="picC" src="/img/pics/test-mobile.jpg" alt="The interface shown on a mobile device" width="367" height="180" /></div>

<p>
Lastly, I'd be remiss to skip mobile when speaking of extensibility. Regrettably, this demo is not a stellar example of mobile extensibility, as I've not had time to create a mobile-friendly version of the interface. I got lucky with iPhone (picture above) only because of the resolution dependence built into the interface, which works surprisingly well on iPhone. But if I had the time, I'd explore options for mobile adaptation, context, and all the other stuff you can read about in <a href="http://mobilewebbook.com/">my book</a>.</p> 

<h3 class="article-sub">Signing Off</h3>
<p>
And so the series comes to a close. Before leaving, it's worth stating these benchmarks are not all-inclusive. There exist other benchmarks that may be considered, but the ones I've presented here I feel summarize extensibility fairly well.</p>

<p>
Thanks for participating in the series, either as innocent bystander or active participant. This is your last chance to call me out on anything that's wonky or misleading, so please do so. Otherwise, happy extensibilitying.</p>
]]>
      
   </content>
</entry>
<entry>
   <title>Extensible CSS Interface III: Adding Ajax Interactivity</title>
   <link rel="alternate" type="text/html" href="http://cameronmoll.com/archives/2008/03/extensible_css_interface_adding_ajax/" />
   <id>tag:cameronmoll.com,2008://1.747</id>
   
   <published>2008-03-20T13:07:54Z</published>
   <updated>2008-04-05T14:45:38Z</updated>
   
   <summary> This series is sponsored by Authentic Jobs, a freelance and full-time job board for web professionals. This is the third article in the four-part series, &quot;The Highly Extensible CSS Interface&quot;. Markup and images for this article: View the demo...</summary>
   <author>
      <name></name>
      
   </author>
   
   
   <content type="html" xml:lang="en" xml:base="http://cameronmoll.com/">
      <![CDATA[<div class="download" style="line-height: 140%; font-style: italic;">
	This series is sponsored by <a href="http://authenticjobs.com/" title="Full-time and freelance job board">Authentic Jobs</a>, a freelance and full-time job board for web professionals.
</div>
<p>
This is the third article in the four-part series, <a href="/archives/2008/02/the_highly_extensible_css_interface_the_series/">"The Highly Extensible CSS Interface"</a>. Markup and images for this article:</p>
<ul>
	<li><a href="/articles/widget/3-ajax.html">View the demo</a></li>
	<li><a href="/articles/widget/ajax.zip">Download ajax.zip</a></li>
</ul>
<div class="snap"><a href="/articles/widget/3-ajax.html" style="border-bottom: 0;"><img class="picC" src="/img/pics/widget03.png" alt="Part III - Adding Ajax Interactivity" width="367" height="166" /></a></div>

<p>
This third article documents the underlying components of Ajax, examines a few examples of Ajax in the demo, and wraps up with a shout-out to resolution dependence.</p>

<h3 class="article-sub">Before we begin...</h3>

<p>
I repeat the disclaimers from last time: One, this interface is optimized for any browser that supports standards exceptionally well. Sorry, no IE6 support. I'm relying on you to make concessions on your own for IE6, thereby allowing this series to focus on what's possible with browsers that support standards exceptionally well without being bogged down in the mire of those that do not. (Again, consider <a href="http://www.positioniseverything.net/articles/cc-plus.html">conditional comments</a> for IE6 concessions.)</p>

<p>
Two, there are a few known &#8220;bugs&#8221; in the interface for which small inconsistencies will be seen from browser to browser. These will be documented as comments in the final markup (to be provided in Part IV). For this article, be aware that IE7 ignores the negative absolute positioning on the right corner image for the Latest Community Activity and Community Snapshot headings. I welcome any suggestions for fixing this.</p>

<p>
Lastly, another hat tip to <a href="http://zelph.com/">Aaron Barker</a> who wrote a lot of custom jQuery and Ajax scripting for this demo.</p>

<h3 class="article-sub">Ajax</h3>

<p>
What was penned a couple years ago as a preface to describing <a href="http://www.cameronmoll.com/archives/001336.html">Ajax design terminology</a> is still relevant today:</p>

<blockquote>
The line between "desktop UI" and "web UI" is gradually blurring. Love it or loathe it, "Ajax", which originally referred to Asynchronous JavaScript + XML, has somehow become the catch-all term for describing "desktop-like" interaction on the web; more accurately, GUI interaction as seen previously only in native applications running in an operating system environment. 
</blockquote>

<p>
When I first spoke about Ajax in a workshop 18 months ago, few raised their hands when asked if they had experience developing sites and apps that employed Ajax. If asked that same question today, it's likely half of that same audience would raise their hands. Indeed, love it or loathe it, Ajax has weaved its way into high-profile sites and weekend projects alike as the de facto standard for producing rich interactivity on the web. (It's worth noting, however, Ajax's position as king of the hill is increasingly challenged by emerging technologies such as <a href="http://www.adobe.com/products/flex/">Adobe Flex</a> and <a href="http://silverlight.net/">Microsoft Silverlight</a>.)</p>

<p>
Ajax implementation typically includes at least three components: <strong>1)</strong>&nbsp;asynchronous server communication, which is most commonly accomplished via XMLHttpRequest, <strong>2)</strong> manipulation of the Document Object Model (DOM) for dynamic display and interaction, and <strong>3)</strong>&nbsp;JavaScript to bind everything together. The 'x' in Ajax refers to XML, but Ajax can also also be accomplished with (X)HTML, the result of which is often termed <a href="http://microformats.org/wiki/rest/ahah">AHAH</a>.</p>

<p><strong>Asynchronicity</strong> is the key component of Ajax -- or any rich internet technology, for that matter -- as it provides that "native app" feel within the web environment. Instead of the traditional request/response model that fetches an entire page with a full trip to the server, asynchronicity means we fetch data for only a select portion of the page, e.g. username availability when registering an account, "without interfering with the display and behavior of the existing page" (<a href="http://en.wikipedia.org/wiki/AJAX">Wikipedia</a>).</p>

<p>In the demo interface, <strong>we fake asynchronous server communication</strong> with a little JavaScript and by fetching data from a few static PHP pages:</p>

<ul>
	<li><strong>activity.php</strong> for the Latest Community Activity section, which functions like <a href="http://digg.com/spy">Digg Spy</a> with the help of <a href="http://leftlogic.com/lounge/articles/jquery_spy2">jQuery Spy</a></li>
	<li><strong>ajaxStuff.php</strong> for mimicking the Ajax request for the bio's edit-in-place feature in <a href="/articles/widget/2-selectors-jquery.html">Part II</a> (adds a spinner image and a one-second delay to mimic server retrieval)</li>
	<li><strong>search.php</strong> and <strong>jquery.autocomplete.js</strong> for the search field auto-complete (Part II)</li>
	<li><strong>project.js</strong> for the Community Snapshot and Latest Community Activity sections, edit in place, and overall scripting wizardry</li>
</ul>

<p>
Faking asynchronicity merely allows you to download the code samples and open the interface on any machine running PHP, without requiring true server communication.</p>

<p>
As an example of how these components come together, let's have a look at the <strong>Community Snapshot.</strong> For starters, we begin with markup: A <code>div</code> encloses the map as a background image, and styling sets the containing block to <code>relative</code> positioning:</p>

<pre><code>&lt;div id="<span style="color: #9D080D;">map</span>"&gt;&lt;/div&gt;

<p><span style="color: #9D080D;">#map</span> {<br />
  position: relative;<br />
  <span style="color: #999;">margin: 0 auto;<br />
  width: 277px;<br />
  height: 155px;</span><br />
  background: url(../img/map.gif) no-repeat center center;<br />
  }</code></pre></p>

<p>
It's important that the positioning be set to <code>relative</code> as this will allow the "<em>n</em> members online" boxes that fade in and out to be positioned absolutely according to the map's containing <code>div</code>. To accomplish this effect, we use a <code>list item</code> with several elements and CSS properties:</p>

<pre><code>&lt;li <span style="color: #9D080D;">class="l1"</span> id="map1"&gt;
  <span style="color: #f7941c;">&lt;p&gt;</span><span style="color: #00A650;">&lt;strong&gt;</span>North America:<span style="color: #00A650;">&lt;/strong&gt;</span> &lt;span&gt;n&lt;/span&gt; members online<span style="color: #f7941c;">&lt;/p&gt;</span>
&lt;/li&gt;

<p>#map li <span style="color: #f7941c;">p</span> {<br />
  <span style="color: #999;">padding: 5px 0;<br />
  line-height: 100% important;<br />
  font-weight: bold;</span><br />
  background: url(../img/maploc-bg.png) no-repeat;<br />
  }<br />
#map li <span style="color: #00A650;">strong</span> {<br />
  <span style="color: #999;">display: block;<br />
  float: left;</span><br />
  text-indent: -9999px;<br />
  }<br />
<span style="color: #9D080D;">.l1</span> {<br />
  background: url(../img/maploc-btm-left.png) no-repeat bottom;<br />
  }	<br />
</code></pre></p>

<p>
Let's break down each of these:</p>

<ul>
	<li><code style="color: #f7941c;">&lt;p&gt;&lt;/p&gt;</code> - This is the wrapper for our content. While it'd be nice to keep our markup as lean as possible with just the <code>li</code>, in this instance we need to add an extra element to aid with extensibility (text resizing/translation) by breaking the box image into two, which I'll describe in a minute. A <code>paragraph</code> seems the most semantic solution rather than a meaningless <code>div</code>.</li>
	<li><code><span style="color: #00A650;">&lt;strong&gt;</span>North America:<span style="color: #00A650;">&lt;/strong&gt;</span></code> - Notice that for sighted users, the region text ("North America") isn't shown in the yellow boxes that fade in. In the spirit of extensibility, we're considering sightless and alternate device users for whom the list item's location relative to the map isn't visible. Therefore, the idea here is that the location is provided in text rather than in geographical reference. So, we're effectively "throwing" the text off the page using the <code>text-indent</code> property and a negative margin great enough to put the text outside the visible area of even the widest screen. <code>display: none</code> would accomplish the same, but some screen readers will ignore any text hidden with <code>display: none</code>. Of course, it's questionable whether a screen reader would even pick up this text, as DOM refreshing isn't always rendered properly by screen readers. <em>(<strong>Note:</strong> The <code>span</code> element is a hook for jQuery to insert the number dynamically.)</em></li>
	<li><code style="color: #9D080D;">class="l1"</code> - We construct each yellow box with two images (top, bottom) specifically to allow for text resizing and translation. The top, <code>maploc-bg.png</code>, is much taller than needed for the default text. This is to accommodate a larger font size or an increased character count caused by translated text. The bottom, <code>maploc-btm-left.png</code> or <code>maploc-btm-right.png</code>, creates a nifty comment bubble thing and aligns to the bottom of the <code>paragraph</code> element. Depending on the box's position on the map, <code>class="l1"</code> requests <code>-left.png</code> whereas <code>class="l2"</code> requests <code>-right.png</code>. Admittedly, <code>class="l1"</code>, which is short for "location 1", is not the most semantic selector declaration, but it's arguably better than <code>class="left"</code> should the positioning be something other than left or right in the future. (Remember <code>class="arial red 10"</code> in <a href="http://cameronmoll.com/archives/2008/02/extensible_css_interface_the_foundation/">Part I</a>?)</li>
</ul>

<p>
Finally, markup that isn't shown here but is shown in the demo, we set the <code>absolute</code> positioning of each list item:</p>

<pre><code>&lt;li class="l1" <span style="color: #9D080D;">style="position: absolute; top: 10px; left: 20px;"</span>&gt;</code></pre>

<p>
Recall that we set the position of <code>#map</code> to <code>relative</code>. Any element that is a child of <code>#map</code>, in this case <code>li</code>, will be positioned relative to the containing block of <code>#map</code> rather than the <code>body</code> or other parent element. Therefore, this list item is positioned <code>10px</code> from the top and <code>20px</code> from the left of <code>#map</code>. <em>(<strong>Note:</strong> I've set this style inline for the sake of instruction. Ideally, you'd want to dynamically insert the positioning as each yellow box is generated.)</em></p>

<p>
Once the markup is in place, we begin adding scripting that allows for Ajax magic to make a graceful entrance. Ironically, the Community Snapshot section isn't a good demonstration of Ajax components because we're totally faking things here by randomly creating "members online" numbers rather than pulling them from a database. Let's shift our focus instead to the Latest Community Activity section to wrap up the discussion. But before we do, throw your mind back to Part II and take a look at the jQuery scripting we've added to fade the yellow boxes in/out:</p>

<pre><code>function nextSnapshot(){
  ...
  $("#"+curID).hide("slow");
  ...
  $("#map"+curNum).show("slow");
  ...
  }</pre></code>

<p>
Look familiar?</p>

<p>
So, the <strong>Latest Community Activity</strong> section is a better representation of Ajax as it fetches data asynchronously from a secondary source, <strong>activity.php,</strong> our pseudo database. As is the auto-complete for search (Part II), which fetches data asynchronously from <strong>search.php,</strong> another pseudo database. In both cases, we manipulate the DOM either by replacing elements in the document tree or by adding new ones. Finally, JavaScript in <strong>project.js</strong> and other files inside the /scripts directory bind everything together, rounding out the three components mentioned earlier.</p>

<p>
I indicated in the series opener that a primary objective of this third article was the demonstration of judicious Ajax usage. While some of the interactivity demonstrated here could be discounted merely as eye candy, be aware the demo interface for this series was in fact derived from an actual project, the likes of which I'll mention at the conclusion of the series. Some of the ideas shown here are based on actual prototype UI features, the sum of which aimed to improve the flow and speed of the interface, while others aimed to provide a very real glimpse into what was happening at that moment within a given community. Thankfully, my former client and good friend has been kind enough to allow me to repurpose certain elements for educational purposes, for which I'm appreciative and hope you are, too.</p>

<p>
<strong>Additional Ajax reading:</strong></p>

<ul>
	<li><a href="http://ajaxian.com/">Ajaxian.com</a></li>
	<li><a href="http://www.peachpit.com/articles/article.aspx?p=425820">Peachpit: How to use AJAX</a></li>
	<li><a href="http://swik.net/Ajax/Places+To+Use+Ajax">SWiK: Useful places to use AJAX</a></li>
	<li><a href="http://dhtmlsite.com/ajax.php">DHTML Site: Ajax Tutorials and Scripts</a></li>
	<li><a href="http://www.drweb.de/weblog/weblog/?p=684">Dr. Web: AJAX, DHTML, and JavaScript libraries</a></li>
	<li><a href="http://thinkingandmaking.com/entries/63">Thinking and Making: Best Practices: Implementing JavaScript for rich internet applications</a></li>
</ul>

<p><br />
<h3 class="article-sub" style="padding-top: 13px;">Resolution Dependence &amp; Miscellany</h3></p>

<p>
This third article is much lengthier than I anticipated, so I'll try and wrap things up quickly. I can't conclude without revisiting resolution dependence mentioned in Parts I and II, as the interface in this demo tricks out the content based on browser width. Resize your browser and watch how the arrangement of Latest Community Activity and Community Snapshot completely changes to adapt to the available screen real estate. Values that allow for this adaptation are contained in <a href="/articles/widget/css/1024.css">1024.css</a>, and re-read <a href="http://cameronmoll.com/archives/2008/02/extensible_css_interface_the_foundation/">Part I</a> to understand how resolution dependence works.</p>

<p>
There's also a couple child and adjacent selectors at play, and these are documented as comments in the HTML page and screen.css.</p>

<p>
Finally, Mark James' <a href="http://www.famfamfam.com/lab/icons/silk/">Silk Icon Set</a> is used throughout the interface, but there are <a href="http://www.iconbuffet.com/">many</a> <a href="http://iconshoppe.com/">other</a> <a href="http://www.mezzoblue.com/icons/chalkwork/">icon</a> sets you should consider purchasing for your project.</p>

<p>
Done. Please pick apart the markup, code, UI, my grammar, you name it. I'm all ears.</p>
]]>
      
   </content>
</entry>
<entry>
   <title>Mobileness</title>
   <link rel="alternate" type="text/html" href="http://cameronmoll.com/archives/2008/03/mobileness/" />
   <id>tag:cameronmoll.com,2008://1.746</id>
   
   <published>2008-03-19T15:28:02Z</published>
   <updated>2008-03-19T17:17:11Z</updated>
   
   <summary>I wasn&apos;t planning on posting another article prior to Extensible CSS Part III (which is scheduled to be published tomorrow), but there&apos;s been too much news in the mobile space to ignore speaking of it any longer. Following is a...</summary>
   <author>
      <name></name>
      
   </author>
   
   
   <content type="html" xml:lang="en" xml:base="http://cameronmoll.com/">
      <![CDATA[<p>I wasn't planning on posting another article prior to Extensible CSS Part III (which is scheduled to be published tomorrow), but there's been too much news in the mobile space to ignore speaking of it any longer. Following is a random summary of stuff I've spotted in recent weeks.</p>

<p>"<a href="http://itn.co.uk/news/e08f352d47d558169dddc9f53c0c8d00.html">Padded lampposts</a> are being trialled ... in Brick Lane [London] after it was found to have the highest number of 'walking and texting' injuries in the country." <strong>Update:</strong> It was a <a href="http://www.engadgetmobile.com/2008/03/17/padded-lampposts-in-london-not-really-being-tested/">publicity stunt</a>... </p>

<p>Dave Shea has hand-crafted a <a href="http://mezzoblue.com/archives/2008/03/18/mediatyping/">mobile device detection script</a> that includes iPhone and TV browser sniffing, among many other common devices. Available for public consumption.</p>

<p>MobileSafari is now the <a href="http://www.appleinsider.com/articles/08/03/18/iphones_safari_already_the_no_1_us_mobile_browser_says_firm.html">#1 mobile browser in the U.S. and #2 in the UK</a>, claims Ireland-based StatCounter. (thanks, Clifton)</p>

<p>Google's <a href="http://www.thoughtgadgets.com/2008/03/beware-of-gvi-google-visual-inventory.html">visual inventory problem</a>. "It's simple. As consumers shift to mobile devices, interface screens get smaller -- leaving less visible room for ads. Google, and other advertisers, run out of visual inventory." </p>

<p><a href="http://www.amazon.com/exec/obidos/ASIN/1847193439/authenticbore-20"><em>Mobile Web Development</em></a> by Nirav Mehta. I’m curious to see how the content compares to mine. I've got a copy on order.</p>

<p>dotMobi's <a href="http://deviceatlas.com/">DeviceAtlas</a>, a comprehensive database of mobile device information. "Everything you ever wanted to know about every handset on the planet."</p>

<p>Abilene Christian University will be <a href="http://acu.edu/news/2008/080225_iphone.html">supplying all incoming freshmen an iPhone or iPod touch</a> this fall. "Freshmen will use an iPhone or iPod touch to receive homework alerts, answer in-class surveys and quizzes, get directions to their professors' offices, and check their meal and account balances." Seems a little overly ambitious even from the perspective of a mobile zealot (ahem, me), but I applaud the initiative nonetheless. Related: <a href="http://acu.mobi/">acu.mobi</a>.</p>

<p><a href="http://mobileopportunity.blogspot.com/2008/02/mobile-applications-rip.html">Mobile applications, RIP</a>. "The business of making native apps for mobile devices is dying, crushed by a fragmented market and restrictive business practices. The problems are so bad that the mobile web, despite its many technical drawbacks, is now a better way to deliver new functionality to mobiles." This was written prior to the iPhone SDK release, and the author acknowledges the impact it would soon have. That said, I have to agree with most of the arguments Michael Mace makes. (It should be noted Mace is former Chief Competitive Officer and VP of Product Planning at Palm.)</p>

<p>Sitepoint: <a href="http://www.sitepoint.com/article/designing-for-mobile-web">Designing for the Mobile Web</a>. If you've read <em>any</em> of my stuff this will no doubt be a review for you. In fact, much of the article's content seems strikingly similar to mine (<a href="http://www.cameronmoll.com/archives/000398.html">series</a> or <a href="http://mobilewebbook.com/">book</a>).</p>

<p>PEW Internet & America Life Project has published a report on <a href="http://www.pewinternet.org/pdfs/PIP_Mobile.Data.Access.pdf">Mobile Access to Data and Information (PDF)</a> in the U.S. Among many other notable statistics is one I find pleasantly surprising: 9% of Blacks and 10% of Hispanics access mobile web content on a typical day, compared to 7% of whites.</p>

<p>The <a href="http://www.usatoday.com/tech/columnist/edwardbaig/2008-02-13-nokia-n82-blind_N.htm">Nokia N82</a> promises sightless users the ability to "snap a picture of a menu, book, printed receipt or business card. Software on the phone processes the words on those items and reads the text aloud in a synthesized voice. The device can even let a blind person know if paper currency is a $5 or a $20 bill." Wow.</p>]]>
      
   </content>
</entry>
<entry>
   <title>A plug for New Orleans</title>
   <link rel="alternate" type="text/html" href="http://cameronmoll.com/archives/2008/03/a_plug_for_new_orleans/" />
   <id>tag:cameronmoll.com,2008://1.742</id>
   
   <published>2008-03-14T02:06:10Z</published>
   <updated>2008-05-16T11:23:04Z</updated>
   
   <summary>Due to SXSW and travel, I&apos;ll be posting Part III of the Extensible CSS Series next week rather than this week. This is a good time to pause and put in a plug for An Event Apart New Orleans, April...</summary>
   <author>
      <name></name>
      
   </author>
   
   
   <content type="html" xml:lang="en" xml:base="http://cameronmoll.com/">
      <![CDATA[<p>Due to SXSW and travel, I'll be posting Part III of the <a href="http://cameronmoll.com/archives/2008/02/the_highly_extensible_css_interface_the_series/">Extensible  CSS Series</a> next week rather than this week.</p>

<p>This is a good time to pause and put in a plug for <a href="http://aneventapart.com/events/2008/neworleans/">An Event Apart New Orleans</a>, April 24–25. Join Jeffrey Zeldman, Eric Meyer, Jason Santa Maria, Aaron Gustafson, Jeff Veen, Dave Shea, Andy Clarke, Brian Oberkirch, Aarron Walter, Stephanie Sullivan, Robert Hoekman Jr., and myself for two full days of banter and enlightenment. (I'll be presenting a reprise of <a href="http://cameronmoll.com/speaking/goodgreat/">Good vs. Great Design</a>. Use code AEAMOLL and you'll save $50 off the purchase price.)</p>

<p>For me, this particular conference is important for two reasons: <strong>One,</strong> after three years of speaking at nearly two dozen conferences nationally and internationally, I've scaled back my speaking in 2008 considerably. AEA New Orleans is one of just two major events I've chosen to speak at this year.</p>

<p><strong>Two,</strong> the location couldn't be better for a gathering of individuals who share a special concern for the needs and wants of others. By "others" we typically mean "users," but for this event I hope we broaden that label to include members of the New Orleans community, as well.</p>

<p>Got any ideas for how I, and possibly the other speakers, and possibly even the attendees, might give back to the community during our stay?</p>]]>
      
   </content>
</entry>
<entry>
   <title><![CDATA[Extensible CSS Interface II: CSS Selectors &amp; jQuery]]></title>
   <link rel="alternate" type="text/html" href="http://cameronmoll.com/archives/2008/03/extensible_css_interface_css_selectors_jquery/" />
   <id>tag:cameronmoll.com,2008://1.730</id>
   
   <published>2008-03-06T14:45:53Z</published>
   <updated>2008-03-20T13:08:19Z</updated>
   
   <summary> This series is sponsored by Authentic Jobs, a freelance and full-time job board for web professionals. This is the second article in the four-part series, &quot;The Highly Extensible CSS Interface&quot;. Markup and images for this article: View the demo...</summary>
   <author>
      <name></name>
      
   </author>
   
   
   <content type="html" xml:lang="en" xml:base="http://cameronmoll.com/">
      <![CDATA[<div class="download" style="line-height: 140%; font-style: italic;">
	This series is sponsored by <a href="http://authenticjobs.com/" title="Full-time and freelance job board">Authentic Jobs</a>, a freelance and full-time job board for web professionals.
</div>
<p>
This is the second article in the four-part series, <a href="/archives/2008/02/the_highly_extensible_css_interface_the_series/">"The Highly Extensible CSS Interface"</a>. Markup and images for this article:</p>
<ul>
	<li><a href="/articles/widget/2-selectors-jquery.html">View the demo</a></li>
	<li><a href="/articles/widget/selectors-jquery.zip">Download selectors-jquery.zip</a></li>
</ul>
<div class="snap"><a href="/articles/widget/2-selectors-jquery.html" style="border-bottom: 0;"><img class="picC" src="/img/pics/widget02.png" alt="Part II - CSS Selectors & jQuery" width="367" height="166" /></a></div>
<p>
This second article provides an opportunity to dive deeper into markup and even a little scripting with the intent of educating the less experienced designer/coder, while furthering the knowledge of more experienced readers in the audience.</p>
<h3 class="article-sub">Before we begin...</h3>
<p>
Disclaimers! Of course. There are two. One, this interface is optimized for any browser that recognizes a reasonable number of the common CSS2 and CSS3 selectors supported among most browsers today. Yes, I'm speaking to you, IE6. You may kindly excuse yourself from this party. As I mentioned in a comment in Part I, I want us to explore newly supported selectors without inhibiting ourselves with IE6. All of you reading this are smart enough to make concessions on your own for IE6 as your audiences and projects demand. (For starters, consider <a href="http://www.positioniseverything.net/articles/cc-plus.html">conditional comments</a>.)</p>
<p>
Two, there are a few known "bugs" in the interface for which small inconsistencies will be seen from browser to browser. I'm okay with this and I hope you are, too. I've left these bugs in place because 1) I didn't have sufficient time to polish the interface perfectly when this was first created (nor since), and 2) I'm hoping you'll consider this a challenge to recommend ways to fix the bugs, thereby improving the final interface.</p>
<p>
Moving right along, let's begin.</p>
<h3 class="article-sub">Selectors</h3>
<p>
So what about these newly supported CSS2 and CSS3 selectors I keep mentioning? Well, by "newly supported" I specifically mean IE7 (and now <a href="http://www.microsoft.com/windows/products/winfamily/ie/ie8/readiness/Install.htm">IE8</a>), as Firefox 2.x or newer and Safari 2.x or newer have supported them for some time. Among the most notable are probably <code>min-width</code> and <code>max-width</code>, attribute selectors, adjacent sibling selector, child selector, and alpha-transparency in PNG images.</p>
<p>
Lest you're confused which selectors are which, download a copy of this <a href="/articles/widget/cheatsheet.pdf">Selectors Cheat Sheet</a>:</p>
<div class="snap"><a href="/articles/widget/cheatsheet.pdf" style="border-bottom: 0;"><img class="picC" src="/img/pics/cheatsheet.gif" alt="CSS Selectors Cheat Sheet" width="367" height="166" /></a></div>
<p>
If you're at SXSW or <a href="http://aneventapart.com/events/2008/neworleans/">An Event Apart New Orleans</a>, come grab me for a finely printed copy free of charge.</p>
<p>
I've made comments throughout the markup and CSS calling out selector examples in this and subsequent code downloads, but I'll take time here to point out just one of them.</p>
<p>
The <strong>attribute selector</strong> eliminates the need to add a class or ID to an element by referencing any attribute used in the element as a hook: <code>type=</code>, <code>title=</code>, <code>src=</code>, etc. This comes in handy in a variety of situations, but probably the most useful is with forms. Styling elements in the CSS with <code>input {}</code> leads to <em>all</em> elements within the form being styled, when in most cases you're targeting text fields only, the submit button only, and so forth. You're then relegated to adding superfluous classes and IDs to do so.</p>
<p>
The search field and button, shown in the first image at the top of this article, serve as our attribute selector example:
</p>
<pre><code>&#60;form id="search" action=""&#62;
  &#60;input type="text" name="search" id="search-query" title="Search" /&#62;
  &#60;input <span style="color: #9D080D;">type="image"</span> name="submit" src="img/search.png" /&#62;
&#60;/form&#62;</code></pre>
<p>
Here we'd like to modify the <code>input</code> image (search.png) so its vertical alignment is even with the <code>input</code> text field. Normally this would require adding a selector hook, but notice the absence of a class or ID selector within <code>&#60;input type="image"&#62;</code>. This is because we can target the image using the <code>type</code> attribute, and we do so like this:</p>
<pre><code>input[<span style="color: #9D080D;">type="image"</span>] {
  vertical-align: middle;
  }</code></pre>
<p>
Any input element containing the attribute <code>type="image"</code> will be vertically aligned in the middle. In this case, it's the search button. <em>(<strong>Note:</strong> The search field requires an ID for the <a href="http://jquery.bassistance.de/autocomplete/">autocomplete plug-in</a>. One could argue we skip the attribute selector altogether and just add the vertical alignment to the search field, as it already has an ID hook. But keep in mind I'm demonstrating possible uses for attribute selectors.)</em></p>
<p>
The attribute selector is one of several CSS2 and CSS3 selectors to be explored, and the brevity of this article doesn't provide freedom to explore them all. Consider perusing <a href="http://www.communitymx.com/content/article.cfm?cid=1C603">"Newly Supported CSS Selectors in IE7"</a> by John Gallant and Holly Bergevin, as well as <a href="/articles/widget/selectors-examples.html">this selectors example</a> and accompanying <a href="/articles/widget/selectors.pdf">slides</a> (included in the .zip) in which you can uncomment styles in the HTML <code>head</code> one at a time and view the effect they have on the content.</p>
<h3 class="article-sub">jQuery</h3>
<p>
Back in December 2005, I <a href="http://www.cameronmoll.com/archives/000666.html">predicted</a> the following:</p>
<blockquote>I've been able to get by the last few years with my measly JavaScript skills, you know where you just copy and paste existing scripts? Yeah, those skills. That'll change in 2006. The traditional role of "web designer/developer" will add JS/DOM to the existing XHTML/CSS mix. Those of us with sorry skills will expect to see a copy of Jeremy Keith's DOM Scripting under the tree this Christmas.</blockquote>
<p>
I was a year or two early with my prediction, but by now it's safe to say we're required to know at least a minimal amount of scripting as a designer or front-end coder. For those of us reluctant to fully embrace the art of writing JavaScript, say hello to <strong>jQuery</strong>.</p>
<p>
Karl Swedberg and Jonathan Chaffer's very useful  <a href="http://www.amazon.com/exec/obidos/ASIN/1847192505/authenticbore-20"><em>Learning jQuery</em></a> describes jQuery as a "general-purpose abstraction layer for common web scripting." I like to think of it as "JavaScript for scripting noobs like me." jQuery enables you to do the following:</p>
<ul>
	<li>Traverse the DOM</li>
	<li>Modify the appearance of a page</li>
	<li>Dynamically alter the content of a page</li>
</ul>
<p>
And it allows you to do all this without writing lines and lines of JavaScript.</p>
<p>
Let's pick apart a sample from the demo to understand the components of jQuery. We'll use the "Dismiss" button in the yellow disclaimer bar at the top of our demo.</p>
<div class="snap"><img class="picC" src="/img/pics/widget-dismiss.gif" alt="Screen showing dismiss button" width="367" height="35" /></div>
<p>Here's the code we add to the button's <code>anchor</code> tag:</p>
<pre><code><span style="color: #f7941c;">$(</span>'#alert'<span style="color: #f7941c;">)</span><span style="color: #00A650;">.slideUp</span><span style="color: #9D080D;">('slow')</span>;</code></pre>
<p>
And here's a description of each component:</p>
<ul>
	<li><code style="color: #f7941c;">$()</code> - The basic jQuery construct (or function) that's used to select parts of the document. In this example, we're selecting an element with the ID of <code>alert</code>.</li>
	<li><code style="color: #00A650;">.slideUp</code> - A jQuery method, one of <a href="http://visualjquery.com/">many</a>. Methods are essentially a shortcut for lots of JavaScript. It's pretty obvious the method <code style="color: #00A650;">slideUp</code> makes the element we're targeting (<code>#alert</code>) slide up.</li>
	<li><code style="color: #9D080D;">('slow')</code> - A pre-defined string that defines how the method functions. In this case, it tells the element to slide up slowly.</li>
</ul>	
<p>
This code can be added either inline or in a separate .js file (or dynamically), the latter being the more optimal method. But here's the real kicker: I didn't have to come up with any of the code above on my own. The construct, method, and string came pre-built with jQuery. I just had to know I wanted the element to slide up slowly, and then I looked up the appropriate references in the jQuery library that corresponded with the animation and movement I was seeking. Boom. Done.</p>
<p>
It's worth noting jQuery isn't merely a cheap tactic for adding bells and whistles to an interface, though unwise use of it can thwart its intended utility much like any technology. Rather, jQuery is intended to be a really easy way to add useful interactivity to a site or app. In fact, jQuery is used throughout the interface in this and subsequent demos: jQuery <a href="http://jquery.bassistance.de/autocomplete/">autocomplete plug-in</a> for the search field, the bio's edit-in-place feature, 
and the slide up/down animation when clicking Your Toolbox. See project.js and jquery.autocomplete.js in the scripts folder included in the download. (Special thanks to <a href="http://zelph.com/">Aaron Barker</a> who wrote a lot of custom jQuery and Ajax scripting for this interface!)</p>
<p>
<strong>Additional jQuery reading:</strong>
</p>
<ul>
	<li><a href="http://jquery.com/">Official jQuery site</a></li>
	<li><a href="http://visualjquery.com/">Visual jQuery</a> (a list of jQuery methods)</li>
	<li><a href="http://www.digital-web.com/articles/jquery_crash_course/">Digital Web Magazine: jQuery Crash Course</a></li>
	<li><a href="http://simonwillison.net/2007/Aug/15/jquery/">Simon Willison: jQuery for JavaScript programmers</a></li>
	<li><a href="http://www.webdesignerwall.com/tutorials/jquery-tutorials-for-designers/">Web Designer Wall: jQuery Tutorials for Designers</a></li>
	<li><a href="http://www.noupe.com/jquery/50-amazing-jquery-examples-part1.html">Noupe: 50+ Amazing jQuery Tutorials</a></li>
</ul>
<h3 class="article-sub" style="padding-top: 13px;">Extensibility</h3>
<p>
We couldn't close this article without highlighting the series' theme, that of adaptable interfaces. This article's demo demonstrates the power of text extensibility throughout the interface. Try increasing the text size (Command/Ctrl + in some browsers), and give it a pass through <a href="http://www.google.com/translate_t">Google Translate</a> by translating the interface to another language such as Chinese. I plugged Dan Cederholm's <a href="http://www.simplebits.com/publications/bulletproof/"><em>Bulletproof Web Design</em></a> book in the series announcement, and I'll plug it again here: Many of the underlying techniques for "bulletproof" text shown in this interface are covered in Dan's book.</p>
<p>
Pay particular attention to the Your Toolbox button. I won't take time here to break down the markup used for the button, but you can view a <a href="/articles/widget/bulletproof-button/bulletproof.html">button sample</a> and accompanying <a href="/articles/widget/bulletproof-button/bulletproof-button.pdf">slides</a> that describe how things work. (These files are also included in the .zip.)</p>
<p>
Also demonstrated in this article is resolution dependence, a continuation from Part I. Notice how the width of the search field changes as the browser width expands and contracts. This is done to allow additional space for all text as the width contracts, while increasing the field size for those with larger resolutions. The next article will expose several tricks for resolution dependence that dramatically alter the content and presentation. (Search field width and other resolution-dependent values are specified in <a href="/articles/widget/css/1024.css">/css/1024.css</a>.)</p>
<p>
Whew, that was more than enough to cover in one article! Suzanne and I are headed to Austin tomorrow and will hopefully meet some of you in person, and we'll return to the series next week with <a href="/archives/2008/03/extensible_css_interface_adding_ajax/">Part III</a>.</p>]]>
      
   </content>
</entry>
<entry>
   <title>Designer, Coder: Separate roles or one?</title>
   <link rel="alternate" type="text/html" href="http://cameronmoll.com/archives/2008/02/designer_coder_separate_roles_or_one/" />
   <id>tag:cameronmoll.com,2008://1.724</id>
   
   <published>2008-02-29T13:17:52Z</published>
   <updated>2008-04-09T16:02:36Z</updated>
   
   <summary>Update: By &quot;Coder&quot; I mean front-end code. Oblige me, if you will, and allow me to ask you a few questions. It&apos;s related to the Extensible CSS series but also to another topic I&apos;m dealing with. 1) How is your...</summary>
   <author>
      <name></name>
      
   </author>
   
   
   <content type="html" xml:lang="en" xml:base="http://cameronmoll.com/">
      <![CDATA[<p><strong>Update:</strong> By "Coder" I mean front-end code.</p>

<p>Oblige me, if you will, and allow me to ask you a few questions. It's related to the Extensible CSS series but also to another topic I'm dealing with.</p>

<p><strong>1)</strong> How is your current role defined: Designer, Coder, or both? Freelancer or part of a team?</p>

<p><strong>2)</strong> Do you agree with the statement I've made on occasion, that those who can code as well as they design will always have an edge over those who do only one? (See <a href="http://www.cameronmoll.com/archives/001211.html">#3</a>.) Or do you believe it's better for designers and coders to specialize in one role? </p>

<p><strong>3)</strong> Is it more "productive" -- a team can take on more projects, get projects done faster, or however you define productive -- to have a single team of designers/coders or one team of each? In which scenario are the resulting user experiences produced "better" (however you define better)?</p>

<p>Feel free to briefly answer any or all of the above questions.</p>]]>
      
   </content>
</entry>
<entry>
   <title>Extensible CSS Interface I: The Foundation</title>
   <link rel="alternate" type="text/html" href="http://cameronmoll.com/archives/2008/02/extensible_css_interface_the_foundation/" />
   <id>tag:cameronmoll.com,2008://1.723</id>
   
   <published>2008-02-28T15:11:12Z</published>
   <updated>2008-05-15T20:13:20Z</updated>
   
   <summary> This series is sponsored by Authentic Jobs, a freelance and full-time job board for web professionals. This is the first article in the four-part series, &quot;The Highly Extensible CSS Interface&quot;. Markup and images for this article: View the demo...</summary>
   <author>
      <name></name>
      
   </author>
   
   
   <content type="html" xml:lang="en" xml:base="http://cameronmoll.com/">
      <![CDATA[<div class="download" style="line-height: 140%; font-style: italic;">
	This series is sponsored by <a href="http://authenticjobs.com/" title="Full-time and freelance job board">Authentic Jobs</a>, a freelance and full-time job board for web professionals.
</div>

<p>
This is the first article in the four-part series, <a href="http://cameronmoll.com/archives/2008/02/the_highly_extensible_css_interface_the_series/">"The Highly Extensible CSS Interface"</a>. Markup and images for this article:</p>

<ul>
	<li><a href="/articles/widget/1-foundation.html">View the demo</a></li>
	<li><a href="/articles/widget/foundation.zip">Download foundation.zip</a></li>
</ul>

<div class="snap"><a href="/articles/widget/1-foundation.html" style="border-bottom: 0;"><img class="picC" src="/img/pics/widget01.png" alt="Part 1 - Foundation" width="367" height="166" /></a></div>

<p>
Throughout the duration of this series, we'll be speaking extensively about markup -- XHTML, CSS, and a little scripting. Marking up a website is akin to speaking Spanish. There's more than one way say something, and there's certainly more than one way to code something. (&#191;Puerco, cochino, <a href="http://forum.wordreference.com/showthread.php?t=1622">cual es</a>?)</p>

<p>As you plumb through my code, I'm hopeful you'll see things that you might code differently or even improve upon. Or put more plainly, I expect you to call me out on things that deserve refinement or just plain suck. After all, we collectively better ourselves as a community by exchanging ideas and opinions for approaches to problem solving, and markup practices are certainly no exception. Fair enough?</p>

<h3 class="article-sub">Meaningful, Lightweight</h3>

<p>
When drafting markup, the factors I consider most important are that it be as <strong>1) meaningful</strong> and as <strong>2) lightweight</strong> as possible.</p> 

<p>
<strong>When we say "meaningful"</strong> we mean the HTML elements and selector names we choose appropriately represent the content in such a way that if we were to experience the web with all styling removed, the hierarchy and structure of the content would still make sense. Long gone are the days of spacer gifs and repeated <code>br</code> elements (with which some of you reading this may not even have experience), replaced with elements which logically, or semantically, represent the content:</p>

<ul>
	<li>An ordered list of top-selling items (<code>ol</code>)</li>
	<li>The principal heading on a page (<code>h1</code>)</li>
	<li>A quotation from a happy customer (<code>blockquote</code> and <code>cite</code>)</li>
</ul>

<p>This approach requires that we remove presentational information from our thinking, a concept described comprehensively by Andy Clarke in his remarkable book, <a href="http://www.transcendingcss.com/"><em>Transcending CSS</em></a>. I still vividly recall my early experiences with CSS as we coded a rather large-scale web application, thinking we were cleverly creating a series of presentational class names that allowed us to mark up content with elegant clarity such as this:</p>

<pre><code>&#60;p class="arial red 10"&#62;</code></pre>

<p>&#8230;only to endure a painful day of reckoning when the application required a redesign, whose 500 templates were to become anything but red Arial 10px type. I can has do-over?</p>

<p><strong>When we say "lightweight"</strong> we mean marking up our content with the fewest parts possible for all things markup -- elements, attributes, and values for HTML; selectors, properties, and values for CSS. For example,</p>
 
<pre><code>&#60;a href=""&#62;&#60;span class="icon"&#62;Map&#60;/span&#62;&#60;/a&#62;</code></pre>

<p>
is minimized as</p>

<pre><code>&#60;a href="" class="icon"&#62;Map&#60;/a&#62;</code></pre>

<p>
Also,</p>

<pre><code>border-width: 1px; border-style: solid; border-color: #000;</code></pre>

<p>
becomes</p>

<pre><code>border: 1px solid #000;</code></pre>

<p>
You'll see numerous examples of meaningful and lightweight markup throughout the series, few of which I'll pause to explicitly explain. So take time on your own to make note of these. (And again, call me out when you see things that can be more meaningful and lightweight.)</p>

<p>
Finally, because the theme of this series is <strong>extensibility</strong> -- designing and coding in such a way that the interface is as adaptable as possible -- the beauty of a meaningful approach is that it inherently helps set the stage for creating an extensible interface.</p>

<p>
Let's examine the <a href="/articles/widget/1-foundation.html">demo example</a> by diving into some of the foundational code.</p>

<h3 class="article-sub">reset.css</h3>
<p>
When I first began coding CSS-styled sites several years ago, it was common to declare a few "global" styles at the top of the master style sheet: <code>body</code>, <code>a img</code>, <code>h1,h2,h3,h4,h5,h6</code> etc. What was done back then as a means of overriding the default styles of any given browser eventually evolved into today's practice of using a "reset" style sheet, typically named reset.css.</p>

<p>
As <a href="http://developer.yahoo.com/yui/reset/">stated</a> by the team at Yahoo, a reset style sheet "removes and neutralizes the inconsistent default styling of HTML elements, creating a level playing field across A-grade browsers&#8230;." If CSS frameworks such as <a href="http://developer.yahoo.com/yui/grids/">Yahoo Grids</a> or <a href="http://code.google.com/p/blueprintcss/">Blueprint</a> are your thing, each of these come equipped with a reset style sheet built in. Alternatively, you can roll your own or use one written by others in the community.</p>

<p>
I personally prefer <a href="http://meyerweb.com/eric/tools/css/reset/">Eric Meyer's Reset CSS</a>, and this is the reset style sheet used in the demo for the series. <em>(<strong>Note:</strong> The demo CSS was written before Eric's January 2008 version of Reset CSS and therefore uses the May 2007 version. I've not gone back to update the CSS to adopt his latest version. Notes about the subtle differences can be found <a href="http://meyerweb.com/eric/thoughts/2008/01/15/resetting-again/">here</a>.)</em></p>

<p>
I use a single style sheet, master.css, to "import" any number of style sheets for a site. I declare the reset style sheet <em>first,</em> thereby allowing any style sheets that come <em>after</em> to override the reset styles as needed:</p>

<pre><code>@import url("reset.css");
@import url("screen.css");
@import ...</code></pre>

<p>
All styles for screen display are then listed in screen.css.</p>

<h3 class="article-sub">Resolution Dependence</h3>

<p>
Herein begins one of the first components of extensibility: An interface that adapts to different display sizes (or browser widths). Perhaps the easiest way to accomplish this is to create a fully fluid layout (<code>width: 100%;</code>), which can accommodate virtually any display or browser width. However, fluid layouts create wide, illegible line lengths on larger displays, among many other issues.</p>

<p>
However, to reap the extensibility benefits of a fluid layout while accounting for issues such as line length, we need only to set limits for the maximum and minimum width of our layout. I first demonstrated this technique in the fictitious <a href="http://cameronmoll.com/projects/book/">Tuscany Luxury Resorts</a> layout created for <a href="http://www.amazon.com/exec/obidos/ASIN/1590596145/authenticbore-20"><em>CSS Mastery</em></a>. Expand and contract your browser's width, and watch how the layout expands and contracts but stops at 740px and 1200px. This is accomplished using the <code>max-width</code> and <code>min-width</code> properties.</p>

<p>
Because IE7 wasn't publicly available when this site was created more than two years ago, and because IE6 ignores the <code>max-width</code> and <code>min-width</code> properties, the markup required a <a href="http://www.cameronmoll.com/archives/000892.html">nasty hack</a> to target IE and force it to replicate <code>max/min-width</code> using a JavaScript extension.</p>

<p>
Welcome to 2008. Although IE7 market share isn't dominant enough to write off IE6 entirely just yet, we can at least begin to explore interfaces that leverage the many CSS2 and CSS3 properties now supported by IE7. And of course, these newly supported properties include <code>max-width</code> and <code>min-width</code> -- no need for nasty JS hacks.</p>

<p>
We'll talk more about resolution dependence in <a href="/archives/2008/03/extensible_css_interface_css_selectors_jquery/">Part II</a>, but for now we'll add a few lines of markup and a couple scripts to start the process. To do so, we'll use Cameron Adams's excellent <a href="http://www.themaninblue.com/writing/perspective/2006/01/19/">Resolution Dependent Layout</a> technique. First, we reference two scripts in the HTML <code>&#60;head&#62;</code>:</p>

<pre><code>&#60;script type="text/javascript" src="scripts/event_listeners.js"&#62;&#60;/script&#62;
&#60;script type="text/javascript" src="scripts/resolution.js"&#62;&#60;/script&#62;</code></pre>

<p>
Second, we add an alternate style sheet which the above scripts will import as the browser width expands and contracts beyond 1200px and 750px, respectively:</p>

<pre><code>&#60;link rel="alternate stylesheet" href="css/1024.css" type="text/css" title="1024 x 768" /&#62;</code></pre>

<p>
Notice that this style sheet is added to the <code>&#60;head&#62;</code> rather than being referenced by master.css.</p>

<p>
Also take note that you can do the <code>max/min-width</code> thing without the need for Cameron Adams's scripts. However, we'll leverage his technique extensively to do some pretty sweet tricks with the content and navigation elements in <del>Part II</del> Parts <a href="/archives/2008/03/extensible_css_interface_css_selectors_jquery/">II</a> &amp; <a href="/archives/2008/03/extensible_css_interface_adding_ajax/">III</a>. But for that, you'll have to wait another week. Peace out, yo.</p>
]]>
      
   </content>
</entry>
<entry>
   <title>The Highly Extensible CSS Interface ~ The Series</title>
   <link rel="alternate" type="text/html" href="http://cameronmoll.com/archives/2008/02/the_highly_extensible_css_interface_the_series/" />
   <id>tag:cameronmoll.com,2008://1.714</id>
   
   <published>2008-02-25T16:21:42Z</published>
   <updated>2008-05-03T04:45:57Z</updated>
   
   <summary> It&apos;s been nearly three years since publishing a series of articles on this site. I&apos;ve got an irresistible yearning to publish anew. Introducing &quot;The Highly Extensible CSS Interface,&quot; a four-part series of how-to&apos;s and savvy conversation to be published...</summary>
   <author>
      <name></name>
      
   </author>
   
   
   <content type="html" xml:lang="en" xml:base="http://cameronmoll.com/">
      <![CDATA[<div class="snap no-top"><img src="/img/title-extensible.gif" alt="The Highly Extensible CSS Interface" width="377" height="200" /></div>

<p>
It's been nearly three years since publishing a series of articles on this site. I've got an irresistible yearning to publish anew.</p>

<p>
Introducing "The Highly Extensible CSS Interface," a four-part series of how-to's and savvy conversation to be published in the coming weeks, with the first article debuting this week. The phrase "highly extensible" is in reference to designing and coding interfaces that are flexible enough to adapt in ways the designer or developer may not foresee when handing off coded templates, while still retaining the overall aesthetic integrity of the layout. I hope you come to discover extensibility as being broader than just "<a href="http://www.simplebits.com/publications/bulletproof/">bulletproofing</a>," though bulletproofing is certainly a significant part of it.</p>

<p>
Here&rsquo;s what to expect:</p>
<ul>
	<li><a href="/archives/2008/02/extensible_css_interface_the_foundation/">Part One: The Foundation</a><br/>
		This first article will briefly discuss the importance of producing visually rich interfaces with semantic, accessible, and portable markup underneath. We'll then dive into code with a reset stylesheet and structure for a resolution-dependent layout.</li>
	<li><a href="/archives/2008/03/extensible_css_interface_css_selectors_jquery/">Part Two: CSS Selectors &amp; jQuery</a><br/>
		Shifting to a more intermediate discussion of code, this second article will present examples that demonstrate how to take advantage of the now-supported CSS2 and CSS3 properties previously ignored by Internet Explorer, such as min/max-width, child and adjacent sibling selectors, and others. We'll also take a look at jQuery, a lightweight scripting library for enhancing UI elements.</li>
	<li><a href="/archives/2008/03/extensible_css_interface_adding_ajax/">Part Three: Adding Ajax Interactivity</a><br/>
		The third article will lightly cover Ajax implementation and its role within the interface. This won't be a highly technical discussion that covers such things as XMLHttpRequest, but rather a demonstration of a few ways to leverage Ajax judiciously.</li>
	<li><a href="http://cameronmoll.com/archives/2008/04/extensible_css_interface_testing_extensibility/">Part Four: Testing for Extensibility</a><br/>
		Lastly, the final article will look back at the chunks of code presented in the three previous articles to assess how they combine to produce a completed interface. We'll then subject the interface to a series of "extensibility tests" such as translation, text resizing and browser width resizing, the addition of new content, and so forth.</li>
</ul>

<p>
Code samples will be available for viewing and downloading with each article. Much of the discussion will be based on material and a demo interface created for a recent workshop, the likes of which you can preview by clicking this screen capture:</p>

<div class="snap"><a href="/articles/widget/" style="border-bottom: 0;"><img class="picC" src="/img/pics/widget.jpg" alt="The Highly Extensible CSS Interface" width="367" height="399" /></a></div>

<p>
See you back here in a couple days.</p>
]]>
      
   </content>
</entry>
<entry>
   <title>Sans iPhone: The debriefing</title>
   <link rel="alternate" type="text/html" href="http://cameronmoll.com/archives/2008/02/sans_iphone_the_debriefing/" />
   <id>tag:cameronmoll.com,2008://1.713</id>
   
   <published>2008-02-22T23:55:23Z</published>
   <updated>2008-02-23T00:04:21Z</updated>
   
   <summary>I survived. Although the wife pointed out that I &quot;cheated&quot; on a couple occasions by accessing information for a few contacts that weren&apos;t synced elsewhere, I managed to make do without my iPhone for a week, swapping it for less...</summary>
   <author>
      <name></name>
      
   </author>
   
   
   <content type="html" xml:lang="en" xml:base="http://cameronmoll.com/">
      <![CDATA[<p>I survived. Although the wife pointed out that I "cheated" on a couple occasions by accessing information for a few contacts that weren't synced elsewhere, I managed to make do without my iPhone for a week, swapping it for less capable devices such as the Sony Ericsson K750 and Nokia 6680.</p>

<p>I'll be publishing something substantial here on an unrelated topic next week and therefore don't have adequate time to do a full write-up right now, but I promised I'd share a few things I learned from the experience. Herein I keep the promise -- unedited, unspellchecked.</p>

<ul>
<li>Unless you're a text-savvy teen, texting is an absolute pain with a numeric keypad, even with T9 (predictive text) enabled. My texting activity dropped significantly the last week. QWERTY keypads -- iPhone or otherwise -- are a necessity in my book.</li>
<li>No music. None of my other phones are set up to do music, mostly because it's a pain to do so. I lugged around my video iPod as a replacement and it was apparent having a phone that also doubled as an iPod -- a veritable iPod and not a ROKR gadget -- was rather convenient.</li>
<li>iPhone's screen performs really well in direct sunlight. A couple of my other devices were hardly discernable in direct sunlight.</li>
<li>The ability to lock or sleep the phone with one button (the top one on iPhone) is really convenient. Most others require at least two keypad clicks, and it's usually a cryptic combination to try and remember.</li>
<li>I didn't actually miss the browsing experience as much as I expected I would, perhaps because most of my phones are set up with <a href="http://operamini.com/">Opera Mini</a>, and a number of the sites I visit with a handset are mobile-optimized anyway. I did, however, do considerably less browsing, which may very well contradict what I just wrote.</li>
<li>Surprisingly, I found that having all menu options available from the home screen is incredibly helpful. Most phones require you to click a "menu" button to see these options, and even on some phones the menu option is not always intuitive. Further, having a screen large enough to accommodate text labels beneath icons is really helpful.</li>
<li><strong>Two big takeaways:</strong> One, the week-long experience was clearly a reminder that handset manufacturers have spent far too much time on hardware research and development, and far too little time on software &amp; UI research and development.</li>
<li>And two, and I shamelessly admit this, the "cool factor" or whatever you might call it is unbeatable with an iPhone. There's nothing better than being in public, having white iPod earphones on, and suddenly taking a call only to see the other passengers on lightrail wonder why you're speaking to yourself. I occasionally slip the iPhone out of my pocket to end the call, even though this unnecessary, merely to ratify that I am indeed a sane, and unabashed, consumer.</li>
<li>Finally, while the overall experience was much less satisfactory compared to the iPhone, I was reminded that most consumers throughout the world carry handsets just like those I carried. This is a two-edged sword for someone who's both a consumer and a content provider. Consumers can expect the bar to be raised for all phone manufacturers since iPhone's inception, which excites content providers, but in the meantime these content providers must cater to a broad spectrum of devices.</li>
</ul>

<p>Experiment concluded. iPhone utility unequivocally verified.</p>]]>
      
   </content>
</entry>
<entry>
   <title>Scrutinizing the XO (OLPC) user experience</title>
   <link rel="alternate" type="text/html" href="http://cameronmoll.com/archives/2008/02/scrutinizing_the_xo_olpc_user_experience/" />
   <id>tag:cameronmoll.com,2008://1.706</id>
   
   <published>2008-02-19T15:37:06Z</published>
   <updated>2008-03-26T14:11:12Z</updated>
   
   <summary> So, I&apos;ve had my XO laptop for nearly two months now. Over this period, I&apos;ve used a few apps, browsed the web occasionally, and watched my sons (ages 2-7) use it. This article is an attempt to compile a...</summary>
   <author>
      <name></name>
      
   </author>
   
   
   <content type="html" xml:lang="en" xml:base="http://cameronmoll.com/">
      <![CDATA[<div class="snap"><a href="http://flickr.com/photos/authentic/2122908621/in/set-72157603499622882/" style="border-bottom: 0;"><img class="picC" src="/img/pics/XO5.jpg" alt="" width="275" height="367" /></a></div>

<p>
So, I've had my <a href="http://cameronmoll.com/archives/2007/12/unpacking_the_xo_100_laptop/">XO laptop</a> for nearly two months now. Over this period, I've used a few apps, browsed the web occasionally, and watched my sons (ages 2-7) use it. This article is an attempt to compile a coherent, albeit brief, report about the overall experience -- form factor, interface, data input, and so forth. Let's begin with the good.</p>

<h3 class="article-sub">The Good</h3>

<p>
<strong>It's as intriguing as an iPhone.</strong> And by that I mean, whenever I pull it out, it seems to draw a crowd. Those who've heard of it are excited to see it. Those who haven't assume I'm carrying a <a href="http://www.fisher-price.com">Fisher Price</a> toy but quickly show interest once they discover I'm toting a full-featured laptop.</p>

<p>
<strong>The camera is quality.</strong> For a $200 device, the embedded camera, which functions as photo camera and video camera, is really impressive. I haven't exported any pictures yet, but the clarity and response time seem better than even embedded iSight cameras.</p>

<p>
<strong>The Measure Activity app is a hit with kids.</strong> <a href="http://wiki.laptop.org/go/Measure">Measure Activity</a> is an app that, among other features, provides a visual display of audio waveforms via mic input. This usually results in kids screaming as loud as they can to see as large a wave as possible. One evening I found myself teaching the boys about things such as amplitude and pitch by having them make a variety of sounds and seeing the resulting waveforms on screen.</p>

<p>
<strong>The OLPC effort is truly laudable.</strong> I applaud Nicholas Negroponte and his vision of bringing educational tools to developing countries. Even if the XO doesn't stick, he's raised the bar of approaching and delivering higher learning for developing countries. As the <em>Economist</em> <a href="http://www.economist.com/science/displaystory.cfm?story_id=10472304">puts it</a>,</p>

<blockquote>Ultimately the OLPC initiative will be remembered less for what it produced than the products it spawned. The initiative is like running the four-minute mile: no one could do it, until someone actually did it. Then many people did.</blockquote>

<p>
Shifting to the less laudable, I present the not-so-good.</p>

<h3 class="article-sub">The Not-So-Good</h3>

<p>
<strong>Fitts' law is often ignored.</strong> I need not delve into a discussion about <a href="http://particletree.com/features/visualizing-fittss-law/">Fitts' Law</a>, as I assume many of you are aware of its assertions. What's disheartening about the XO is that scrollbars, checkboxes, and a few other UI elements are terribly small and difficult to target with a trackpad mouse -- small fingers or big. Consider the browser scrollbar, easily less than half the relative width of scrollbars in Windows or OS X:</p>

<div class="snap"><img class="picC" src="/img/pics/XO20.jpg" alt="" width="367" height="275" /></div>

<p>
The only saving grace in the example above is that the scrollbar is always pinned against the right side of the screen, effectively increasing the virtual width substantially. However, the height isn't much larger, and it's still a difficult target.</p>

<p>
<strong>More input mechanisms than necessary.</strong> Three trackpads and two mouse buttons? For children who've never used a laptop, no less? I can't understand this decision. The OLPC wiki describes the <a href="http://wiki.laptop.org/go/OLPC_Human_Interface_Guidelines/The_Sugar_Interface#Trackpad">dual-mode potential</a> of the trackpad, but the only part functional out of the box is the middle portion.</p>

<div class="snap"><a href="" style="border-bottom: 0;"><img class="picC" src="/img/pics/XO17.jpg" alt="" width="367" height="275" /></a></div>

<p>
Further, there's no tactile feedback around the edges of the middle trackpad, and I find myself often leaving the center area to the left or right and wondering why the mouse no longer works -- until I glance down and see I've left the middle area. A subtle raised line on either side perceivable by touch would be enough to correct this.</p>

<p>As for the two mouse buttons, this is a fallacy attributable only to the experienced PC users who developed the hardware and software. Observe as my four-year-old son uses the XO for the first time and attempts first to use the trackpad as a giant button, second to click the left and right mouse buttons until discovering the correct one:</p>

<div style="margin: 7px 0;"><object type="application/x-shockwave-flash" width="377" height="300" data="http://www.vimeo.com/moogaloop.swf?clip_id=625356&amp;server=www.vimeo.com&amp;fullscreen=1&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=">	<param name="quality" value="best" />	<param name="allowfullscreen" value="true" />	<param name="scale" value="showAll" />	<param name="movie" value="http://www.vimeo.com/moogaloop.swf?clip_id=625356&amp;server=www.vimeo.com&amp;fullscreen=1&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=" /></object></div>

<p>
Did you catch me being thrown off by the two buttons, as well? The MacBook's single-button trackpad would have been the obvious model to follow here.</p>

<p>
<strong>Whose idea was "hot corners"?</strong> Seriously, this was a downright terrible decision. Hot corners, or activating UI functions when moving the mouse into one of the four corners of the screen, interrupts the current screen display and presents new options to the user. Mac users will recognize this feature if they've activated screen corners for Expos&#233;.</p>

<p>
For experienced users, hot corners can benefit workflow greatly. However, for inexperienced users, it can disrupt workflow substantially. We've seen this as non-Mac user candidates have come in for interviews and we've lent them one of our Macs for presenting work, only to watch them stumble repeatedly whenever they inadvertently hit a screen corner. (We usually have to disable Expos&#233; because of this.)</p>

<p>
Watch the video above again. Around 1:07, while the camera is on Isaac's face, he activates a hot corner and the dock-like menu shows up at the bottom of the screen. He then struggles to return to the application he's in. You'll then see me struggle with it, as well.</p>

<p><strong>Ajax chokes the browser.</strong> I can't access Ajax / JS-heavy sites such as <a href="http://cameronmoll.com/archives/2008/02/gtd_with_netvibes/">Netvibes</a> on my XO, as it usually kills the browser. This isn't a problem of the device per se, but rather of the content provider. It's a reminder to consider the limitations of the device requesting the content when developing web experiences for non-desktop machines. (Think mobile here, too.)</p>

<h3 class="article-sub">Conclusion</h3>

<p>
There's been plenty of acclaim and disdain in the press regarding the OLPC effort, and I don't know enough yet about the device or the organization to warrant taking sides. However, I share the woes of <a href="http://www.olpcnews.com/sales_talk/g1g1/one_give_one_got_none_xo_laptop.html">many who've not received their XO</a>, having ordered a second shortly after the first and it still hasn't arrived. Thus, before we can overly concern ourselves with user experience, let's hope these devices are reaching the audience for which they were intended.</p>
]]>
      
   </content>
</entry>
<entry>
   <title>Sans iPhone for a week</title>
   <link rel="alternate" type="text/html" href="http://cameronmoll.com/archives/2008/02/sans_iphone_for_a_week/" />
   <id>tag:cameronmoll.com,2008://1.696</id>
   
   <published>2008-02-14T16:02:48Z</published>
   <updated>2008-02-23T04:13:46Z</updated>
   
   <summary> Yesterday I announced I was giving up iPhone for a week, returning to a less feature- and experience-rich phone to see what I miss out on. Today I&apos;ve got the Sony Ericsson K750, one of eight phones I own...</summary>
   <author>
      <name></name>
      
   </author>
   
   
   <content type="html" xml:lang="en" xml:base="http://cameronmoll.com/">
      <![CDATA[<div class="snap"><img class="picC" src="/img/pics/6phones.jpg" width="367" height="191" alt="6 of the phones I own" /></div>

<p>Yesterday I <a href="http://twitter.com/cameronmoll/statuses/707907002">announced</a> I was giving up iPhone for a week, returning to a less feature- and experience-rich phone to see what I miss out on. Today I've got the Sony Ericsson K750, one of eight phones I own (pictured second from the top above).</p>

<p>I'll post a report sometime next week when it's over. In the meantime, anyone know where I can get an iPhone patch -- you know, one of those sticky things you put on your arm? I fear I'll begin trembling soon.</p>

<p>In other news, Nokia and Sony Ericsson are releasing devices that appear to be targeting would-be iPhone buyers, the <a href="http://www.engadget.com/2008/02/14/hands-on-with-nokias-high-rolling-n96/">Nokia N96</a> and <a href="http://www.engadget.com/2008/02/10/sonyericsson-xperia-x1-qwerty-with-windows-mobile/">Sony Ericsson XPERIA X1</a>. Early Android prototypes are beginning to surface, Texas Instruments is testing <a href="http://gadgets.boingboing.net/2007/09/20/texas-instruments-sh.html">in-device phone projectors</a> in its labs, Best Buy is among the most recent of U.S. retailers to release a <a href="http://m.bestbuy.com/">mobile version</a> of its site, and so on and so forth.</p>

<p>Is 2008 finally the year of mobile, specifically mobile media? (Better <a href="http://mobilewebbook.com/">begin studying</a> if so.)</p>

<p><strong>15 Feb:</strong> For the next few days I'm switching to the <a href="http://www.gsmarena.com/toshiba_903t-1613.php">Toshiba 903T</a>, a handset that was sold primarily in Japan after its release in 2005.  </p>

<p><strong>18 Feb:</strong> Today I'm pocketing the <a href="http://www.gsmarena.com/nokia_6680-1045.php">Nokia 6680</a>.</p>

<p><strong>19 Feb:</strong> Back to the Sony Ericsson K750 today.</p>

<p><strong>22 Feb:</strong> <a href="http://cameronmoll.com/archives/2008/02/sans_iphone_the_debriefing/">The debriefing</a>.</p>]]>
      
   </content>
</entry>

</feed>
