<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Elf Sternberg</title>
	<atom:link href="http://www.elfsternberg.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.elfsternberg.com</link>
	<description>Done, and gets things smart.</description>
	<lastBuildDate>Tue, 16 Mar 2010 17:00:04 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Pro Git (Apress) vs Version Control with Git (O&#8217;Reilly)</title>
		<link>http://www.elfsternberg.com/2010/03/16/pro-git-apress-version-control-git-oreilly/</link>
		<comments>http://www.elfsternberg.com/2010/03/16/pro-git-apress-version-control-git-oreilly/#comments</comments>
		<pubDate>Tue, 16 Mar 2010 17:00:04 +0000</pubDate>
		<dc:creator>Elf Sternberg</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[book]]></category>
		<category><![CDATA[quick]]></category>
		<category><![CDATA[review]]></category>

		<guid isPermaLink="false">http://www.elfsternberg.com/?p=685</guid>
		<description><![CDATA[Apress&#8217; Pro Git is a better book than O&#8217;Reilly&#8217;s Version Control with Git.  The O&#8217;Reilly book tries hard to educate you about the repository, but goes off into the weeds with details about history and branch management that overwhelm a user who &#8220;just wants to use the damn thing.&#8221;  The Apress book has a section [...]]]></description>
			<content:encoded><![CDATA[<p>Apress&#8217; <em><a href="http://apress.com/book/view/9781430218333">Pro Git</a></em> is a better book than O&#8217;Reilly&#8217;s <em><a href="http://oreilly.com/catalog/9780596520137">Version Control with Git</a></em>.  The O&#8217;Reilly book tries hard to educate you about the repository, but goes off into the weeds with details about history and branch management that overwhelm a user who &#8220;just wants to use the damn thing.&#8221;  The Apress book has a section on what goes on within the repository, complete with illustrations of blobs, pointers, trees, and so forth, but by eliding the blobs when talking about branches, and only going into detail when necessary, it makes the branch and merge process much easier to understand than the O&#8217;Reilly book.</p>
<p>Also, since I&#8217;m using Git on top of SVN, the Apress book&#8217;s section on using Git with other repository software is sufficiently technical without, again, overwhelming you with the details.</p>
<p>Kathy Sierra once posted about <a href="http://headrush.typepad.com/creating_passionate_users/2005/03/motivated_to_le.html">Just In Time vs Just In Case Learning</a>.  The O&#8217;Reilly book quickly becomes a &#8220;just in case&#8221; book, whereas Apress&#8217; book is much more &#8220;just in time.&#8221;  The Apress book supports <a href="http://www.brepettis.com/blog/2009/3/3/the-cult-of-done-manifesto.html">my mantra</a>, courtesy of Bre Pettis: &#8220;Pretending you know what you&#8217;re doing is almost the same as knowing what you are doing, so just accept that you know what you&#8217;re doing even if you don&#8217;t and do it.&#8221;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.elfsternberg.com/2010/03/16/pro-git-apress-version-control-git-oreilly/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Django South, Fabric, and dev, staging, production</title>
		<link>http://www.elfsternberg.com/2010/03/15/django-south-fabric-dev-staging-production/</link>
		<comments>http://www.elfsternberg.com/2010/03/15/django-south-fabric-dev-staging-production/#comments</comments>
		<pubDate>Mon, 15 Mar 2010 17:12:21 +0000</pubDate>
		<dc:creator>Elf Sternberg</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.elfsternberg.com/?p=679</guid>
		<description><![CDATA[In my current development house, we have the painfully obvious &#8220;different settings for different stages of the development cycle.&#8221;  Production, obviously, isn&#8217;t in DEBUG mode so users don&#8217;t see the underlying technology when things go awry, and each dev has his own database.   The solution we&#8217;ve found is to create separate settings files with [...]]]></description>
			<content:encoded><![CDATA[<p>In my current development house, we have the painfully obvious &#8220;different settings for different stages of the development cycle.&#8221;  Production, obviously, isn&#8217;t in <tt>DEBUG</tt> mode so users don&#8217;t see the underlying technology when things go awry, and each dev has his own database.   The solution we&#8217;ve found is to create separate settings files with only the minor changes made, and then for <tt>settings.py</tt> to import that when loading, using the &#8220;<tt>--settings</tt>&#8221; argument to <tt>manage.py</tt>.</p>
<p>There is an inherent conflict between <a href="http://south.aeracode.org/">South</a> and <a href="http://docs.fabfile.org/0.9.0/">Fabric</a> when we do this.  We use Fabric for roll-out from the repository to staging and production, and call migrate in the process.  We came to use South late in the development cycle, and many of our apps were converted to South long after they&#8217;d been populated with data.  We know how to do the whole &#8220;create, migrate data, drop table&#8221; migration process, but the real trick was <tt>0001_initial.py</tt>; South &#8220;fakes&#8221; this for tables with existing data, recording that it was run when, in fact, it was skipped over in favor of the version created ages ago by <tt>migrate.py syncdb</tt>.</p>
<p>When we roll out to another stage, that database has no knowledge of this fakery.  <em>Neither does South</em>.  Fabric would call &#8216;migrate&#8217; and the process would crash with warnings about how the table already exists.   So how do we get past that step?</p>
<p>Well, the answer would be to modify <tt>0001_initial.py</tt> to test if the table already exists, and to skip if it does.  We need for the engine to fail only when actually accessing the data, and we need it to fail early.  Most models have a core table, the one without which the entire app would be meaningless.  In my example, that table is &#8220;stories.story&#8221;:</p>
<pre>    def forwards(self, orm):

        # Probe for this.  If it works, we don't want to proceed,
        # because this isn't a migration, it's a build-out.

        if not db.dry_run:
            try:
                x = orm['stories.Story'].objects.all()
                return
            except Exception, e:
                pass</pre>
<p>Now, if the database table doesn&#8217;t exist, the ORM handler will throw an exception and we&#8217;ll proceed to build the table.  If it does, the table already exists and we shouldn&#8217;t proceed.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.elfsternberg.com/2010/03/15/django-south-fabric-dev-staging-production/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Syllogisms for the web development world.</title>
		<link>http://www.elfsternberg.com/2010/03/15/multiple-streams-income-require/</link>
		<comments>http://www.elfsternberg.com/2010/03/15/multiple-streams-income-require/#comments</comments>
		<pubDate>Mon, 15 Mar 2010 16:57:36 +0000</pubDate>
		<dc:creator>Elf Sternberg</dc:creator>
				<category><![CDATA[chat]]></category>
		<category><![CDATA[personal]]></category>

		<guid isPermaLink="false">http://www.elfsternberg.com/?p=671</guid>
		<description><![CDATA[I have this t-shirt.  It reads: &#8220;Knowledge is power.  Power corrupts.  Study Hard.  Be Evil.&#8221;  Because if we take those two first popular truisms and put them together, we get a very unpopular conclusion.
The truisms of our business are &#8220;It&#8217;s an attention economy, where revenue is driven by how much attention you can get,&#8221; and [...]]]></description>
			<content:encoded><![CDATA[<p>I have this t-shirt.  It reads: &#8220;Knowledge is power.  Power corrupts.  Study Hard.  Be Evil.&#8221;  Because if we take those two first popular truisms and put them together, we get a very unpopular conclusion.</p>
<p>The truisms of our business are &#8220;It&#8217;s an attention economy, where revenue is driven by how much attention you can get,&#8221; and &#8220;In order to succeed, a website must have multiple streams of income.&#8221;</p>
<p>Therefore, &#8220;In order for your website to succeed, it must have multiple ways of getting attention.&#8221;</p>
<p>And <em>that&#8217;s</em> the tricky part.  In the real world, that still takes patience, legwork, and dedication.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.elfsternberg.com/2010/03/15/multiple-streams-income-require/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Vi&#8217;s &#8220;paren bounce&#8221; feature for Emacs</title>
		<link>http://www.elfsternberg.com/2010/03/05/vis-paren-bounce-feature-emacs/</link>
		<comments>http://www.elfsternberg.com/2010/03/05/vis-paren-bounce-feature-emacs/#comments</comments>
		<pubDate>Sat, 06 Mar 2010 07:13:03 +0000</pubDate>
		<dc:creator>Elf Sternberg</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.elfsternberg.com/?p=658</guid>
		<description><![CDATA[I need to make clear that I did not invent the code below.  I&#8217;m not sure who did, but the topic of making vi&#8217;s &#8220;paren bounce&#8221; feature work in Emacs came up in a conversation I had the other day, and I&#8217;m posting the chunk of code that&#8217;s lived in my .emacs file since, [...]]]></description>
			<content:encoded><![CDATA[<p>I need to make clear that I did not invent the code below.  I&#8217;m not sure who did, but the topic of making vi&#8217;s &#8220;paren bounce&#8221; feature work in Emacs came up in a conversation I had the other day, and I&#8217;m posting the chunk of code that&#8217;s lived in my .emacs file since, oh heck, must have been back in my days at F5 Networks.  This code creates a new function, &#8220;paren-bounce&#8221;, and binds it to the key sequence &#8220;CTRL-%&#8221; (I know, that&#8217;s probably not a real control code, but Emacs Doesn&#8217;t Care).</p>
<pre>(defun paren-bounce ()
  (interactive)
  (let ((prev-char (char-to-string (preceding-char)))
	(next-char (char-to-string (following-char))))
    (cond ((string-match "[[{(&lt;]" next-char) (forward-sexp 1))
          ((string-match "[\]})&gt;]" prev-char) (backward-sexp 1))
          (t (error "%s" "Not an expression boundary.")))))

(global-set-key [(control ?%)] 'paren-bounce)</pre>
<p>Similar solutions can be found <a href="http://www.emacswiki.org/emacs/ParenthesisMatching">here</a> and <a href="http://www.northbound-train.com/emacs.html">here</a>.  I suspect the latter is where I got mine from&#8211; there are minor differences, but his page hasn&#8217;t been updated since 2001, so that&#8217;s about right.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.elfsternberg.com/2010/03/05/vis-paren-bounce-feature-emacs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Replacing Flash with Javascript: Metacritic&#8217;s slide show with in-image thumbnails</title>
		<link>http://www.elfsternberg.com/2010/03/01/replacing-flash-javascript-metacritics-slide-show-inimage-thumbnails/</link>
		<comments>http://www.elfsternberg.com/2010/03/01/replacing-flash-javascript-metacritics-slide-show-inimage-thumbnails/#comments</comments>
		<pubDate>Tue, 02 Mar 2010 01:13:12 +0000</pubDate>
		<dc:creator>Elf Sternberg</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://www.elfsternberg.com/?p=661</guid>
		<description><![CDATA[Metacritic is an interesting website with a pretty stylish layout, but one thing that drives me nuts is the use of Flash for a simple slideshow on the home page.  I decided, as an experiment, to try and replace that with one driven by Javascript.
The choice of javascript turned out to be simple: I&#8217;d [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.metacritic.com">Metacritic</a> is an interesting website with a pretty stylish layout, but one thing that drives me nuts is the use of Flash for a simple slideshow on the home page.  I decided, as an experiment, to try and replace that with one driven by Javascript.</p>
<p>The choice of javascript turned out to be simple: I&#8217;d use <a href="http://jquery.com/">jQuery</a>.  Not only is it easy to write with, but there&#8217;s already an incredible plug-in for jQuery called <a href="http://malsup.com/jquery/cycle/">Cycle</a>.  Having read through the documentation, the only &#8220;tricks&#8221; would involve automagically generating the thumbnails, placing them in-line within the slide show, and ensuring they had the right z-index so that they&#8217;d be visible.</p>
<p>You can read the description or <a href="http://elfsternberg.com/projects/metacritic/">skip right to the demo</a>.  The source code is all there.</p>
<p>The basic premise is that cycler automatically fade between the images, using the standard &#8220;fade&#8221; setting.  So the entirety of the javascript, after importing jQuery and Cycler, is this:</p>
<pre>$(document).ready(function() {
    $('#slides').cycle({
    fx: 'fade',
    delay: 4000,
    speed: 200,
    pager: '#slide-thumbnails',
    pagerAnchorBuilder: function(idx, slide) {
        var s = $('img', slide).attr('src');
        return ('&lt;a href="#"&gt;&lt;img src="' + s + '" /&gt;&lt;/a&gt;');
    }})
});</pre>
<p>Basically, we&#8217;re looking for the DOM element &#8217;slides&#8217;, and all of its immediately children will be treated like slides.  We also have a second DOM element &#8217;slide-thumbnails&#8217;, which I&#8217;m filling with a simple anchor containing a copy of the image.</p>
<p>The DOM element &#8217;slides&#8217; has individual slides, which look like this:</p>
<pre>&lt;div&gt;
  &lt;img src="./95.jpg"&gt;
  &lt;div&gt;
    &lt;h2&gt;Omaha&lt;/h2&gt;
    &lt;p&gt;At the annual Pumpkin patch run.&lt;/p&gt;
  &lt;/div&gt;
&lt;/div&gt;</pre>
<p>To be fair, I&#8217;m assuming every image is the same size.  That&#8217;s relatively important.</p>
<p>The only remaining trick is to wrap slides is another div, &#8217;slide-container&#8217;, position relative, and both &#8217;slides&#8217; and &#8217;slide-thumbnails&#8217; are positioned absolutely with respect to &#8217;slider-container.&#8217;  &#8216;Slide-thumbnail&#8217; is made the width of a thumbnail, forcing them into a vertical column.  The z-index of both &#8217;slides&#8217; and &#8217;slide-thumbnails&#8217; are both set so that the thumbnails are above the slides.</p>
<p>It&#8217;s simple and elegant.  A little positioning allows the title and text to be placed accordingly, and a nice black background, set to 66% opacity (which you can do with PNG) allows you to place the title and text on the page with a nice delimeter.</p>
<p>Metacritic has in-house artists who make sure the left thumbnail bar doesn&#8217;t stomp all over the image.  You&#8217;ll have to master some fine Gimp or Photoshop to achieve the same effect.</p>
<p><a href="http://elfsternberg.com/projects/metacritic/">Check out the demo</a>.  Source code is all there.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.elfsternberg.com/2010/03/01/replacing-flash-javascript-metacritics-slide-show-inimage-thumbnails/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Amazon&#8217;s CDN is picky.  Django can make dealing with it annoying.</title>
		<link>http://www.elfsternberg.com/2010/02/24/amazons-cdn-picky-django-dealing-annoying/</link>
		<comments>http://www.elfsternberg.com/2010/02/24/amazons-cdn-picky-django-dealing-annoying/#comments</comments>
		<pubDate>Wed, 24 Feb 2010 23:19:04 +0000</pubDate>
		<dc:creator>Elf Sternberg</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.elfsternberg.com/?p=655</guid>
		<description><![CDATA[This is probably a &#8220;no-duh&#8221; to some people, but I had not known this.  When you upload something to the CDN, you get a url that looks like this:
http://cdn.mycompany.com/images/someimage.jpg
Which is all fine and good.  Django&#8217;s MEDIA_URL is usually suffixed with a closing slash, meaning that if you&#8217;re in the habit of typing something [...]]]></description>
			<content:encoded><![CDATA[<p>This is probably a &#8220;no-duh&#8221; to some people, but I had not known this.  When you upload something to the CDN, you get a url that looks like this:</p>
<pre>http://cdn.mycompany.com/images/someimage.jpg</pre>
<p>Which is all fine and good.  Django&#8217;s <tt>MEDIA_URL</tt> is usually suffixed with a closing slash, meaning that if you&#8217;re in the habit of typing something like <tt>%(foo)s/images/someimage</tt> in a standard python template, you&#8217;re going to end up with:</p>
<pre>http://cdn.mycompany.com//images/someimage.jpg</pre>
<p>And the CDN throws a wobbly.  Most djangoites know to write the template as <tt>{{ MEDIA_URL }}images/someimage.jpg</tt> apparently.  I need to build that habit.  Apache is forgiving.  Amazon is not.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.elfsternberg.com/2010/02/24/amazons-cdn-picky-django-dealing-annoying/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>LessCss lets me express myself in CSS the way I express myself in Python</title>
		<link>http://www.elfsternberg.com/2010/02/18/lesscss-lets-express-css-express-python/</link>
		<comments>http://www.elfsternberg.com/2010/02/18/lesscss-lets-express-css-express-python/#comments</comments>
		<pubDate>Thu, 18 Feb 2010 21:06:18 +0000</pubDate>
		<dc:creator>Elf Sternberg</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[web development]]></category>

		<guid isPermaLink="false">http://www.elfsternberg.com/?p=646</guid>
		<description><![CDATA[I recently implemented a new subsite for IndieFlix using LessCss, the Leaner CSS metaframework.  LessCss is a programming language that abstracts CSS out into a hierarchal language, where instead of writing:
#header { ... }
#header img { ... }
You write:
#header {
    ...
    img { ... }
}
Which, believe me, makes [...]]]></description>
			<content:encoded><![CDATA[<p>I recently implemented a new subsite for IndieFlix using <a href="http://lesscss.org/docs.html">LessCss</a>, the Leaner CSS metaframework.  LessCss is a programming language that abstracts CSS out into a hierarchal language, where instead of writing:</p>
<pre>#header { ... }
#header img { ... }</pre>
<p>You write:</p>
<pre>#header {
    ...
    img { ... }
}</pre>
<p>Which, believe me, makes a whole lot more sense.  Even better, if you&#8217;re fond of the <tt>clearfix</tt> technique, then you&#8217;ll see why I fell in love with LessCSS.  I had a long sidebar object, and I realized that I needed to make it clearfix to deal with some float issues.  I had <tt>.clearfix { ... }</tt> defined already in my CSS, and I had my &#8220;.social-networks&#8221; class that I wanted clearfixed.  LessCSS let me write:</p>
<pre>.social-networks {
    .clearfix;
    ...
}</pre>
<p>And it all worked the way I expected it to, without my having to clutter up the HTML with layout hacks.</p>
<p>Yes, this means that there are duplicates in the CSS LessCSS actually spits out, but that shouldn&#8217;t matter, any more than you care about bitsequence duplication in a large C++ program&#8217;s object code.  I tend to look down on metaframeworks; my experience with using Ruby to write Scriptaculous code, or GWT, is that unless I want to jump through strange hoops I&#8217;m limited to expressing in Javascript only what can be expressed by the writers of the Ruby or Java-based framework.  This problem is made worse by the promise of not having to learn Javascript to be expressive in it.  I call shenanigans.    The win for using any framework has to seriously overwhelm the loss of expressiveness.  I don&#8217;t bemoan losing the expressiveness of assembly language when I write in Python (although if I <em>did</em> have a problem that needed assembly language, I&#8217;d write in ASM, build a C wrapper, and compile the thing into a Python module&#8230; because I know all three of those languages<sup>*</sup>), and the only thing I lose using LessCSS is browser hackery, which I shouldn&#8217;t be doing anyway.</p>
<p>The containerization of cascades is such a clear win for me that I can&#8217;t imagine going back to doing CSS by hand.  Well, I can, I just wouldn&#8217;t want to.</p>
<p>LessCSS does not carry your CSS comments from its source file to the CSS output, so it&#8217;s inappropriate if you need browser hacks that rely on poor comment parsers (I&#8217;m looking at <em>you</em>, Opera) or have alternative uses for comments in CSS (such as Wordpress&#8217;s style.css file does).</p>
<hr />[*] Okay, I studied Motorola 68K assembly, which is a far cry from x86 assembly.  Back in the 80&#8217;s, everyone &#8220;knew&#8221; the x86 chipset was junk and Motorola&#8217;s native multitasking cores were the future.  Then Apple had to screw up using the multitasking features, Amiga and Atari blew it, Microsoft, IMB and Intel continued to chug along, and we&#8217;re left with the x86 series.  </p>
]]></content:encoded>
			<wfw:commentRss>http://www.elfsternberg.com/2010/02/18/lesscss-lets-express-css-express-python/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The most butch website design on the Interwebs</title>
		<link>http://www.elfsternberg.com/2010/02/16/butch-website-design-interwebs/</link>
		<comments>http://www.elfsternberg.com/2010/02/16/butch-website-design-interwebs/#comments</comments>
		<pubDate>Wed, 17 Feb 2010 05:59:39 +0000</pubDate>
		<dc:creator>Elf Sternberg</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[web development]]></category>
		<category><![CDATA[church websites]]></category>
		<category><![CDATA[manliness]]></category>
		<category><![CDATA[web design]]></category>
		<category><![CDATA[websites]]></category>

		<guid isPermaLink="false">http://www.elfsternberg.com/?p=638</guid>
		<description><![CDATA[Sharper FX
They do nothing but churches.  Black churches, too.  Sharper FX is an 11 on the scale of Manliness.  Watch some of the Flash splash pages.  They&#8217;re amazing.  I love this site.
]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.sharperfx.com/portfolio.htm">Sharper FX</a></p>
<p>They do nothing but churches.  Black churches, too.  Sharper FX is an 11 on the scale of Manliness.  Watch some of the Flash splash pages.  They&#8217;re amazing.  I love this site.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.elfsternberg.com/2010/02/16/butch-website-design-interwebs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The horror of bad website design&#8230;</title>
		<link>http://www.elfsternberg.com/2010/02/16/the-horror-of-bad-website-design/</link>
		<comments>http://www.elfsternberg.com/2010/02/16/the-horror-of-bad-website-design/#comments</comments>
		<pubDate>Wed, 17 Feb 2010 03:35:10 +0000</pubDate>
		<dc:creator>Elf Sternberg</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[web development]]></category>

		<guid isPermaLink="false">http://www.elfsternberg.com/?p=632</guid>
		<description><![CDATA[A friend of mine pointed me to the website of CB Richard Ellis,  a real-estate investment and management house with a big footprint here in the Pacific Northwest.  
Their hiring website is a horror.  No, really, go look, unless you&#8217;re an epileptic.  (Sadly, the effect only seems to be present for [...]]]></description>
			<content:encoded><![CDATA[<p>A friend of mine pointed me to the website of CB Richard Ellis,  a real-estate investment and management house with a big footprint here in the Pacific Northwest.  </p>
<p>Their hiring website <a href="https://pscareers.cbre.com/">is a horror</a>.  No, really, go look, unless you&#8217;re an epileptic.  (Sadly, the effect <i>only</i> seems to be present for Firefox users.  Opera, Chrome, and IE6 didn&#8217;t show the evil.)  Then go read <a href="http://www.access-board.gov/sec508/standards.htm">The Federal Electronic and Information Technology Accessibility Standards</a>, better known as &#8220;Section 508&#8243;, and document how they&#8217;re out of compliance.  (Hint: Section 1194.21k).</p>
<p>I fully believe it&#8217;s possible to design very attractive websites that don&#8217;t violate Sec508.  CBRE has failed on a galactic scale with this abomination.  </p>
<p>If you&#8217;re not a Firefox user, here&#8217;s the horror:  Every input button has this added to its CSS: <tt>text-decoration:blink;</tt>.</p>
<p>Yes, that&#8217;s right.  Every input button is set to &#8220;blink.&#8221;  I don&#8217;t know what&#8217;s worse: that the people who wrote their site thought that was cute, or that Firefox honors it.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.elfsternberg.com/2010/02/16/the-horror-of-bad-website-design/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Lesson learned&#8230;</title>
		<link>http://www.elfsternberg.com/2010/02/15/lesson-learned/</link>
		<comments>http://www.elfsternberg.com/2010/02/15/lesson-learned/#comments</comments>
		<pubDate>Mon, 15 Feb 2010 08:00:35 +0000</pubDate>
		<dc:creator>Elf Sternberg</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://www.elfsternberg.com/?p=628</guid>
		<description><![CDATA[A few weeks ago, I installed the latest version of the Gnome Accessibility Toolkit (Gnome-AT), and while I never quite got it to work the way I wanted to, it didn&#8217;t seem to be doing any harm.  I figured once I got to the point of showing the client the work we&#8217;d talk about accessibility [...]]]></description>
			<content:encoded><![CDATA[<p>A few weeks ago, I installed the latest version of the Gnome Accessibility Toolkit (Gnome-AT), and while I never quite got it to work the way I wanted to, it didn&#8217;t seem to be doing any harm.  I figured once I got to the point of showing the client the work we&#8217;d talk about accessibility issues.  (Many of her clients have low vision problems, so making the site super-accessible is super-important.  I&#8217;ll have a post soon about making <em>specific zones </em>of your websites auto-sizeable in an elegant way with jQuery.)</p>
<p>It turns out that it wasn&#8217;t working because I hadn&#8217;t stopped and restarted X.  So, when I did that after installing some new fonts, everything went kablooey.  The most tragic was Emacs, which grabbed the mouse and keyboard and <em>never let go</em>.  Very annoying.  I had to kill X remotely, logging in through my Palm pilot (which isn&#8217;t much fun, believe me.)</p>
<p>The problem with very stable OS&#8217;s is that when they go unstable, the events that caused the instability may be separated from the experience of instability by days, even weeks.  In this case, four weeks.  It wasn&#8217;t until X had died for the third time&#8211; this time is a <tt>screen</tt> session I had accidentally started it in, but which luckily preserved the output of X&#8217;s error log&#8211; that I finally saw Emacs spitting out all these &#8220;at-lock-FAIL&#8221; warnings and wondered what the heck those might be.   A quick un-install of the accessibility components and I&#8217;m back up and running, but man, that was annoying.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.elfsternberg.com/2010/02/15/lesson-learned/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
