<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
<channel><generator>http://textpattern.com/?v=4.0.8</generator>
<title>Kimili</title>
<link>http://kimili.com/</link>

<description>Updated Semi-Annually!</description>
<pubDate>Tue, 23 Jun 2009 15:39:39 GMT</pubDate>

<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/kimili/journal" type="application/rss+xml" /><item><title>Flexible Scalable Background Image</title>
<description>
<![CDATA[<p><span class="opening">When I get Photoshop comps from designers to build</span> in <span class="caps">HTML</span>, <span class="caps">CSS</span> and Javascript, there are inevitably some elements of the designs which work well in <del>the Ivory Tower of</del> Photoshop, but present unique challenges when translating those elements into code a browser can work with. One such element on a project I recently completed featured a fixed size content area layered over background image that took up the entire browser window. <a href="http://kimili.com/journal/flexible-scalable-background-image/">Here&#8217;s how I implemented it</a>.</p>]]>
</description>
<content:encoded>
<![CDATA[<p><span class="opening">When I get Photoshop comps from designers to build</span> in <span class="caps">HTML</span>, <span class="caps">CSS</span> and Javascript, there are inevitably some elements of the designs which work well in <del>the Ivory Tower of</del> Photoshop, but present unique challenges when translating those elements into code a browser can work with. One such element on a project I recently completed featured a fixed size content area layered over background image that took up the entire browser window. The comp looked something like this:</p>

	<p><img src="http://kimili.com/images/132.jpg" title="MediaConcepts Corporation" alt="MediaConcepts Corporation" /></p>

	<p>The most striking aspect of the design, I think, is the full-window background image. When thinking about how to implement it, I considered what the client wanted as well as how I thought it should behave. When I combined those, the requirements I listed out for it seemed a bit daunting. It would have to&#8230;</p>

	<ul>
		<li>Fill up the browser window, <em>regardless of the window size</em>.</li>
		<li>Maintain the aspect ratio of the image (so it doesn&#8217;t distort like in a funhouse mirror).</li>
		<li>Resize with the browser window as the window got bigger.</li>
		<li>Maintain a minimum size that it would not shrink beyond.</li>
		<li>Remain centered.</li>
		<li>Not cause scrollbars.</li>
		<li>Not be in the <span class="caps">HTML</span> as an <code>&lt;img /&gt;</code> element.</li>
	</ul>

	<p>Now, I know <a href="http://css-tricks.com/how-to-resizeable-background-image/">this ground has been tread before</a>, but the solutions I came across didn&#8217;t fulfill all of the requirements I needed. There was no way <span class="caps">CSS</span> was going to do it alone, even if I used CSS3&#8217;s <del>mythical</del> marginally supported <a href="http://www.css3.info/preview/background-size/">background-size</a> property.</p>

	<h2>The Basics</h2>

	<p>Let&#8217;s consider my last requirement first: <strong>Not be in the <span class="caps">HTML</span> as an <code>&lt;img /&gt;</code> element</strong>.</p>

	<p>Since the image is a supporting design element, rather than integral to the content on the page, this was an important consideration. I didn&#8217;t want the template <span class="caps">HTML</span> to be cluttered up with a big image which wouldn&#8217;t make sense if you were to view the page with, say, a browser on a mobile phone. It would have to start with a background image on the <code>&lt;body&gt;</code> element. I began by setting up the screen <span class="caps">CSS</span> with a definition like this:</p>

  <ol class="code">
<li><code>body { </code></li>
<li class="tab1"><code>margin: 0;</code></li>
<li class="tab1"><code>padding: 0;</code></li>
<li class="tab1"><code>background-image: url(img/bg_page_default.jpg); </code></li>
<li class="tab1"><code>background-position: top center; </code></li>
<li class="tab1"><code>background-repeat: no-repeat; </code></li>
<li class="tab1"><code>background-color: #333; </code></li>
<li class="tab1 cmnt"><code>/* This next one is for IE6 */</code></li>
<li class="tab1"><code>background-attachment: fixed;</code></li>
<li><code>}</code></li>

</ol>


	<p>For the project, I decided that the background images would be sized to 1280&times;960. With that <span class="caps">CSS</span> definition above, if you look at the site with a monitor that has that resolution or smaller, you&#8217;d see the image fill the window, remain centered, not cause scrollbars and basically fulfill all the requirements I listed above. All would be well.</p>

	<p>But what if your monitor is bigger? What if it&#8217;s wider, taller or both? In that case, if you were to expand your browser window beyond 1280 pixels wide or 960 pixels tall, you&#8217;d see the dark grey background color, and that&#8217;s no good, because it would violate my first requirement: <strong>Fill up the browser window, <em>regardless of the window size</em>.</strong> It ends up looking something like this:</p>

	<p><img src="http://kimili.com/images/133.jpg" title="MediaConcepts Corporation" alt="MediaConcepts Corporation" /></p>

	<p>Clearly, we&#8217;re falling short so far.</p>

	<h3>Enhancing it for the Big Screen</h3>

	<p>To reiterate my 3rd and 4th requirements:</p>

	<blockquote>
		<p>	<ul>
		<li><strong>Resize with the browser window as the window got bigger</strong>.</li>
		<li><strong>Maintain a minimum size that it would not shrink beyond</strong>.</li>
	</ul></p>
	</blockquote>

	<p>For simplicity&#8217;s sake, I decided that the minimum image size for the background would be the native size of the image itself (in this case, 1280&times;960 pixels). With the window any smaller than that, you&#8217;d see a portion of the image. It wouldn&#8217;t resize, and it would remain centered.</p>

	<p>As the window gets bigger then that on one or both axes, though, we have to stretch the image to fill the available space. Since we can&#8217;t do that reliably with <span class="caps">CSS</span> yet, a different approach needs to be taken. I needed some Javascript to fill the void. Armed with it, I would:</p>

	<ol>
		<li>Grab the <span class="caps">URL</span> from the <code>background-image</code> property on the <code>&lt;body&gt;</code>.</li>
		<li>Use that <span class="caps">URL</span> to create an <code>&lt;img /&gt;</code> element which I&#8217;d then append to the <code>&lt;body&gt;</code> element.</li>
		<li>Hide the new <code>&lt;img /&gt;</code> element when the browser window is smaller than the image.</li>
		<li>Show the new <code>&lt;img /&gt;</code> element when the browser window is either taller or wider than the image.</li>
		<li>Set the new <code>&lt;img /&gt;</code> element to either 100% wide or 100% high (but not both!), as necessary, to maintain the aspect ratio.</li>
	</ol>

	<p>In order to take care of steps 3, 4 and 5, I opted to use some <span class="caps">CSS</span> to do that rather modifying <span class="caps">CSS</span> properties directly on the generated <code>&lt;img /&gt;</code> element, so I set up some definitions like so:</p>

  <ol class="code">
<li><code>img#expando { </code></li>
<li class="tab1"><code>padding: 0;</code></li>
<li class="tab1"><code>margin: 0;</code></li>
<li class="tab1"><code>position: absolute; </code></li>
<li class="tab1"><code>display: none; </code></li>
<li class="tab1"><code>z-index: 1; </code></li>
<li class="tab1"><code>-ms-interpolation-mode: bicubic; </code></li>
<li><code>}</code></li>
<li>&nbsp;</li>
<li><code>.wide img#expando, </code></li>
<li><code>.tall img#expando { </code></li>
<li class="tab1"><code>display: block; </code></li>
<li><code>}</code></li>
<li>&nbsp;</li>
<li><code>.wide img#expando { </code></li>
<li class="tab1"><code>width: 100%; </code></li>
<li class="tab1"><code>height: auto; </code></li>
<li><code>}</code></li>
<li>&nbsp;</li>
<li><code>.tall img#expando { </code></li>
<li class="tab1"><code>width: auto; </code></li>
<li class="tab1"><code>height: 100%; </code></li>
<li><code>}</code></li>
<li>&nbsp;</li>
<li><code>.ie6fixed {</code></li>
<li class="tab1"><code>position: absolute;</code></li>
<li class="tab1"><code>top: expression((ignoreMe = document.documentElement.scrollTop ?</code></li>
<li class="tab3"><code>document.documentElement.scrollTop : document.body.scrollTop) + 'px');</code></li>
<li><code>}</code></li>

</ol>


	<p>Now, with those definitions, I can simply toggle a <code>wide</code> or <code>tall</code> class name on the <code>&lt;body&gt;</code> element to hide and show the generated image, as well as determine whether it should stretch horizontally or vertically. I&#8217;ll set up a Javascript function to execute when the window gets resized which does the calculation and applies the necessary class name to the <code>&lt;body&gt;</code> element.</p>

	<p><em>As an aside, if you&#8217;re curious about the <code>-ms-interpolation-mode: bicubic</code> property, that&#8217;s in there to keep the image from looking, as <a href="http://unstoppablerobotninja.com/entry/fluid-images/">Ethan puts it</a>, <strong>janky</strong> in IE7 when it&#8217;s resized. You can peruse the <a href="http://msdn.microsoft.com/en-us/library/ms530822(VS.85).aspx">geeky details on <span class="caps">MSDN</span></a>.</em></p>

	<p>I think it&#8217;s important to point out that the first 2 steps above respect my first requirement &#8211; <strong>not be in the <span class="caps">HTML</span> as an <code>&lt;img /&gt;</code> element</strong>. Because we&#8217;ll use the <span class="caps">URL</span> of the <code>&lt;body&gt;</code>&#8217;s background image to create a new image element on the fly with Javascript, the image won&#8217;t be appended to the page if we don&#8217;t have Javascript available or our <span class="caps">CSS</span> doesn&#8217;t define a background image on the body, as might be the case if you had <span class="caps">CSS</span> files for alternate environments, like mobile phones for instance.</p>

	<p>One detail I didn&#8217;t list out is that in order to respect my <strong>not cause scrollbars</strong> requirement, I&#8217;d have to wrap the generated image with a <code>&lt;div&gt;&lt;/div&gt;</code>. I&#8217;ll set that wrapper <code>&lt;div&gt;&lt;/div&gt;</code>&#8217;s width and height to 100% of the browser window&#8217;s width and height and apply an <code>overflow: hidden</code> to it, which will crop the image and prevent scrollbars from appearing. I&#8217;ll take care of this in the Javascript, as I only need to set those styles when the wrapper and the image are created.</p>

	<h2>Where it All Comes Together</h2>

	<p>So here&#8217;s a version of the script I came up with that pulls together all that functionality in its entirety:</p>

  <ol class="code">
<li><code>var flexiBackground = function(){</code></li>
<li class="tab1">&nbsp;</li>
<li class="tab1 cmnt"><code>/**</code></li>
<li class="tab2 cmnt"><code>CONFIGURATION:</code></li>
<li class="tab2 cmnt"><code>Define the size of our background image</code></li>
<li class="tab1 cmnt"><code>*/</code></li>
<li class="tab1"><code>var bgImageSize = {</code></li>
<li class="tab2"><code>width : 1280,</code></li>
<li class="tab2"><code>height : 960</code></li>
<li class="tab1"><code>};</code></li>
<li class="tab1">&nbsp;</li>
<li class="tab1 cmnt"><code>/**</code></li>
<li class="tab2 cmnt"><code>Declare and define variables</code></li>
<li class="tab1 cmnt"><code>*/ </code></li>
<li class="tab1"><code>var $window = $(window),</code></li>
<li class="tab2"><code>$body = $('body'),</code></li>
<li class="tab2"><code>imageID = &quot;expando&quot;,</code></li>
<li class="tab2"><code>tallClass = 'tall',</code></li>
<li class="tab2"><code>wideClass = 'wide',</code></li>
<li class="tab2"><code>$bgImage, $wrapper, img, url, imgAR;</code></li>
<li class="tab2">&nbsp;</li>
<li class="tab1 cmnt"><code>/**</code></li>
<li class="tab2 cmnt"><code>Are we dealing with ie6?</code></li>
<li class="tab1 cmnt"><code>*/</code></li>
<li class="tab1"><code>var ie6 = ($.browser.msie &amp;&amp; parseInt($.browser.version, 10) &lt;= 6);</code></li>
<li class="tab1">&nbsp;</li>
<li class="tab1 cmnt"><code>/**</code></li>
<li class="tab2 cmnt"><code>Set up the action that happens on resize</code></li>
<li class="tab1 cmnt"><code>*/</code></li>
<li class="tab1"><code>var resizeAction = function() {</code></li>
<li class="tab2"><code>var win = {</code></li>
<li class="tab3"><code>height : $window.height(),</code></li>
<li class="tab3"><code>width : $window.width()</code></li>
<li class="tab2"><code>};</code></li>
<li>&nbsp;</li>
<li class="tab2 cmnt"><code>// The current aspect ratio of the window</code></li>
<li class="tab2"><code>var winAR = win.width / win.height;</code></li>
<li>&nbsp;</li>
<li class="tab2 cmnt"><code>// Determine if we need to show the image and whether it needs to stretch tall or wide</code></li>
<li class="tab2"><code>if (win.width &lt; bgImageSize.width &amp;&amp; win.height &lt; bgImageSize.height) {</code></li>
<li class="tab3"><code>$body</code></li>
<li class="tab4"><code>.removeClass(wideClass)</code></li>
<li class="tab4"><code>.removeClass(tallClass);</code></li>
<li class="tab2"><code>} else if ((win.w &lt; bgImageSize.width &amp;&amp; win.height &gt;= bgImageSize.height) || (winAR &lt; imgAR)) {</code></li>
<li class="tab3"><code>$body</code></li>
<li class="tab4"><code>.removeClass(wideClass)</code></li>
<li class="tab4"><code>.addClass(tallClass);</code></li>
<li class="tab3 cmnt"><code>// Center the image</code></li>
<li class="tab3"><code>$bgImage.css('left', Math.min(((win.width - bgImageSize.width) / 2), 0));</code></li>
<li class="tab2"><code>} else if (win.width &gt;= bgImageSize.width) {</code></li>
<li class="tab3"><code>$body</code></li>
<li class="tab4"><code>.addClass(wideClass)</code></li>
<li class="tab4"><code>.removeClass(tallClass);</code></li>
<li class="tab3"><code>$bgImage.css('left', 0);</code></li>
<li class="tab2"><code>}</code></li>
<li class="tab2">&nbsp;</li>
<li class="tab2 cmnt"><code>// Need to fix the height of the wrapper for IE6</code></li>
<li class="tab2"><code>if (ie6) {</code></li>
<li class="tab3"><code>$wrapper.css('height', win.height);</code></li>
<li class="tab2"><code>}</code></li>
<li class="tab1"><code>};</code></li>
<li class="tab1">&nbsp;</li>
<li class="tab1"><code>return {</code></li>
<li class="tab2">&nbsp;</li>
<li class="tab2 cmnt"><code>/*</code></li>
<li class="tab3 cmnt"><code>Sets up the basic functionality</code></li>
<li class="tab2 cmnt"><code>*/</code></li>
<li class="tab2"><code>initialize : function() {</code></li>
<li class="tab3">&nbsp;</li>
<li class="tab3 cmnt"><code>// No need for any of this if the screen isn't bigger than the background image</code></li>
<li class="tab3"><code>if (screen.availWidth &lt;= bgImageSize.width || screen.availHeight &lt;= bgImageSize.height) {</code></li>
<li class="tab4"><code>return;</code></li>
<li class="tab3"><code>}</code></li>
<li class="tab3">&nbsp;</li>
<li class="tab3 cmnt"><code>// Parse out the URL of the background image and drop out if we don't have one</code></li>
<li class="tab4"><code>url = $body.css('background-image').replace(/^url\((&quot;|')?|(&quot;|')?\);?$/g, '') || false;</code></li>
<li class="tab3"><code>if (!url || url === &quot;none&quot; || url === &quot;&quot;) {</code></li>
<li class="tab4"><code>return;</code></li>
<li class="tab3"><code>}</code></li>
<li class="tab3">&nbsp;</li>
<li class="tab3 cmnt"><code>// Get the aspect ratio of the image</code></li>
<li class="tab3"><code>imgAR = bgImageSize.width / bgImageSize.height;</code></li>
<li>&nbsp;</li>
<li class="tab3 cmnt"><code>// Create a new image element</code></li>
<li class="tab3"><code>$bgImage = $('&lt;img /&gt;')</code></li>
<li class="tab6"><code>.attr('src', url)</code></li>
<li class="tab6"><code>.attr('id', imageID);</code></li>
<li class="tab6">&nbsp;</li>
<li class="tab3 cmnt"><code>// Create a wrapper and append the image to it.</code></li>
<li class="tab3 cmnt"><code>// The wrapper ensures we don't get scrollbars.</code></li>
<li class="tab3"><code>$wrapper = $('&lt;div&gt;&lt;/div&gt;')</code></li>
<li class="tab5"><code>.css({</code></li>
<li class="tab6"><code>'overflow' : 'hidden',</code></li>
<li class="tab6"><code>'width' : '100%',</code></li>
<li class="tab6"><code>'height' : '100%',</code></li>
<li class="tab6"><code>'z-index' : '-1'</code></li>
<li class="tab5"><code>})</code></li>
<li class="tab5"><code>.append($bgImage)</code></li>
<li class="tab5"><code>.appendTo($body);</code></li>
<li class="tab7">&nbsp;</li>
<li class="tab3 cmnt"><code>// IE6 Doesn't do position: fixed, so let's fake it out.</code></li>
<li class="tab3 cmnt"><code>// We'll apply a class which gets used in the CSS to emulate position: fixed</code></li>
<li class="tab3 cmnt"><code>// Otherwise, we'll simply used position: fixed.</code></li>
<li class="tab3"><code>if (ie6) {</code></li>
<li class="tab4"><code>$wrapper.addClass('ie6fixed');</code></li>
<li class="tab3"><code>} else {</code></li>
<li class="tab4"><code>$wrapper.css({</code></li>
<li class="tab5"><code>'position' : 'fixed',</code></li>
<li class="tab5"><code>'top' : 0,</code></li>
<li class="tab5"><code>'left' : 0</code></li>
<li class="tab4"><code>});</code></li>
<li class="tab3"><code>}</code></li>
<li class="tab3">&nbsp;</li>
<li class="tab3 cmnt"><code>// Set up a resize listener to add/remove classes from the body </code></li>
<li class="tab3"><code>$window.bind('resize', resizeAction);</code></li>
<li>&nbsp;</li>
<li class="tab3 cmnt"><code>// Set it up by triggering a resize</code></li>
<li class="tab3"><code>$window.trigger('resize');</code></li>
<li class="tab2"><code>}</code></li>
<li class="tab1"><code>};</code></li>
<li><code>}();</code></li>
<li>&nbsp;</li>
<li><code>$(document).ready(flexiBackground.initialize);</code></li>

</ol>


	<p>Yes, yes, it&#8217;s using <a href="http://jquery.com">jQuery</a> to help smooth out some of the rougher areas of Javascript like event handling and reading the <span class="caps">CSS</span> properties of elements, so if you&#8217;d like to use it as is, be sure to <a href="http://docs.jquery.com/How_jQuery_Works#jQuery:_The_Basics">include jQuery</a> on any page that uses this script as well <em>(If you prefer, the script can fairly easily be ported to utilize a different framework or, with a little extra effort, none at all)</em>.</p>

	<p>The project I&#8217;ve been referencing throughout this post is using a version of this script successfully &#8211; <a href="http://mediaconceptscorp.com">take a look at it in context</a>. You can also take a look at a <a href="http://kimili.com/examples/flexibackground/">working example</a> or <a href="http://kimili.com/examples/flexibackground/js/flexibg.js">download the script</a> for your own use. <em>Make sure that you include the <span class="caps">CSS</span> definitions above!</em></p>

	<h2>A Word of Warning</h2>

	<p>The <code>resizeAction()</code> method gets tied to the resize event on the browser window. Most browsers fire the event repeatedly as you resize a window, giving you a smooth transition between when you see the <code>&lt;body&gt;</code> background image and the generated stretchy <code>&lt;img /&gt;</code>. Some browsers, however, wait until <em>after you&#8217;re done resizing to fire the event</em>, giving a decidedly ugly transition between the two. The most notable offender is Firefox and other Gecko based browsers. This is a <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=114649">long standing bug</a>, going back to the Netscape 4 days(!), and it looks as if the Mozilla team has <em>finally</em> fixed it in the upcoming Firefox 3.1/3.5 release.</p>

	<h2>In Parting</h2>

	<p>If you&#8217;ve found this useful, I&#8217;d love to hear your thoughts on how it could be improved upon and any ways you take it and make it your own. Either <a href="http://kimili.com/#txpCommentInputForm">leave a comment</a> or <a href="http://kimili.com/contact/">email me</a>.</p>]]>
</content:encoded>
<link>http://feedproxy.google.com/~r/kimili/journal/~3/72_94A4cPkc/flexible-scalable-background-image</link>
<pubDate>Wed, 20 May 2009 22:06:35 GMT</pubDate>
<dc:creator>Michael Bester</dc:creator>
<guid isPermaLink="false">tag:kimili.com,2009-05-20:492d4839031cf0856f2dca618531715c/45e66ebc6de838383ca35596d41261bb</guid>
<feedburner:origLink>http://kimili.com/journal/flexible-scalable-background-image</feedburner:origLink></item>
<item><title>Plugin Update: Kimili Twitter Timeline v1.2</title>
<description>
<![CDATA[<p><span class="opening">Fresh off the press, here&#8217;s a new version</span> of <a href="http://kimili.com/plugins/kml_twitter">Kimili Twitter Timeline</a>,  the best way to put your Twitter feed on your Textpattern site. This version covers the requests people have had and adds a bit more flexibility in configuring how tweets are displayed on your site.</p>]]>
</description>
<content:encoded>
<![CDATA[<p><span class="opening">Fresh off the press, here&#8217;s a new version</span> of <a href="http://kimili.com/plugins/kml_twitter">Kimili Twitter Timeline</a>, the best way to put your Twitter feed on your Textpattern site. This version covers the requests people have had and adds a bit more flexibility in configuring how tweets are displayed on your site. New features are:</p>

	<ul>
		<li><strong>Private account authentication!</strong> &#8211; Now you can display your tweets even if you have a protected account set up.</li>
		<li>Any Textile formatting in tweet text can now be parsed as Textile.</li>
		<li>You can now customize link text in the footer.</li>
		<li>Changed feed request method from <code>fopen</code> to <code>curl</code>, which is more flexible and <em>should</em> be more compatible for some who were having problems retrieving their feed.</li>
	</ul>

	<p>Read more about it and download it on the <a href="http://kimili.com/plugins/kml_twitter">Kimili Twitter Timeline</a> home page.</p>]]>
</content:encoded>
<link>http://feedproxy.google.com/~r/kimili/journal/~3/s-kbwK2UjQM/plugin-update-kimili-twitter-timeline-v12</link>
<pubDate>Tue, 17 Feb 2009 22:07:57 GMT</pubDate>
<dc:creator>Michael Bester</dc:creator>
<guid isPermaLink="false">tag:kimili.com,2009-02-17:492d4839031cf0856f2dca618531715c/2695350b026dcbbffd726d0de3213b0d</guid>
<feedburner:origLink>http://kimili.com/journal/plugin-update-kimili-twitter-timeline-v12</feedburner:origLink></item>
<item><title>A Retort - IE8 Blacklist: Forcing Standards Rendering Opt-In</title>
<description>
<![CDATA[<p><span class="opening">A blog post making the rounds in web development circles today</span> argues that a new feature in Microsoft&#8217;s Internet Explorer 8 (currently in pre-release) presents another major obstacle in the way of standards-based web development. That post is <em>almost</em> completely wrong.</p>]]>
</description>
<content:encoded>
<![CDATA[<p><span class="opening">A blog post making the rounds in web development circles today</span> argues that a new feature in Microsoft&#8217;s Internet Explorer 8 (currently in pre-release) presents another major obstacle in the way of standards-based web development. That post is <em>almost</em> completely wrong.</p>

	<p>The post in question, <a href="http://www.isolani.co.uk/blog/standards/Ie8BlacklistForcingStandardsRenderingOptIn">IE8 Blacklist: Forcing Standards Rendering Opt-In</a>, points out the fact that Microsoft is implementing a &#8220;compatibility list&#8221; for its upcoming release of Internet Explorer 8, which will, in effect, trigger the browser to render a site on that list as if it were being displayed in IE7. Further, the list is generated primarily by users of IE8 who think a certain site doesn&#8217;t look right in the browser (IE8 will default to standards-compliant page rendering) and click on the browser&#8217;s &#8220;Compatibility View&#8221; button. If enough people click on that button for a given site, Microsoft takes note of it and adds that site to the compatibility list.</p>

	<p>Anybody who knows me and how I prefer to work can tell you that I&#8217;m no Microsoft loyalist or sympathizer by any means, but <a href="http://www.isolani.co.uk/">Mike Davies</a>, the author of the IE8 Blacklist post, is really overreacting here.</p>

	<p>If you read through the Microsoft IE blog post, <a href="http://blogs.msdn.com/ie/archive/2008/12/03/compatibility-view-improvements-to-come-in-ie8.aspx">Compatibility View Improvements to come in IE8</a>, which Davies sources to form his argument, you&#8217;ll see one thing that he fails to point out is that the compatibility list <em>(Microsoft avoids the term &#8220;blacklist&#8221; in the post)</em> only keeps track of &#8220;high-volume&#8221; sites:</p>

	<blockquote>
		<p>The sites on the list are based on objective criteria applied to telemetry data as well as product support channels. For example, in addition to the top sites worldwide, we determine high-volume on a market-by-market basis; the top 50 sites in one region of the world might be very low on the world-wide list of top sites, but are important to include for those customers.</p>
	</blockquote>

	<p>By &#8220;high-volume&#8221; sites, Microsoft is referring to</p>

	<blockquote>
		<p>&#8230;sites like <a href="http://facebook.com">facebook.com</a>, <a href="http://myspace.com">myspace.com</a>, <a href="http://bbc.co.uk">bbc.co.uk</a>, and <a href="http://cnn.com">cnn.com</a>...</p>
	</blockquote>

	<p>Davies uses <a href="http://alistapart.com/">A List Apart</a> as an example of a site that could inadvertently get blacklisted into rendering in compatibility mode. As popular a site as <span class="caps">ALA</span> is in the web industry, it is <span class="caps">FAR</span> from one of the top sites worldwide. As of today, <a href="http://www.alexa.com/data/details/traffic_details/alistapart.com">Alexa puts its rank at 59,067</a>, and <a href="http://www.quantcast.com/alistapart.com">Quantcast puts it at 43,450</a>. Not exactly the top 50 in any market, and therefore not &#8220;blacklistable&#8221;.</p>

	<p>Additionally, he fails to point out that Microsoft will do outreach to owners of sites which have been blacklisted to let them know and help them out:</p>

	<blockquote>
		<p>We reach out to those sites (beyond all the other outreach we’ve already done!) to make sure they know the experience their IE8 visitors have by default and what steps they (the sites) can take to make it better. We also tell them that in the meantime, we’re adding their site to this compatibility list and provide instructions on how the site can opt-out. (If a domain notifies Microsoft that it’s choosing to opt-out, we remove it from the list at the next scheduled list update.)</p>
	</blockquote>

	<p>While it&#8217;s not entirely clear exactly how Microsoft will determine what qualifies as a &#8220;high volume&#8221; site, what is clear is that <em>most</em> sites &#8211; especially niche sites maintained by individuals who care deeply about web standards &#8211; don&#8217;t make the cut. We&#8217;re just not in the same league, traffic-wise, as Google, Facebook, MySpace or <span class="caps">CNN</span>.</p>

	<p>Put yourself in Microsoft&#8217;s position. They have a tremendous weight of legacy sites and applications written with proprietary code that they don&#8217;t want to break with a browser upgrade. They also realize they&#8217;re way behind the curve when it comes to supporting current and future web standards. I do believe they&#8217;re trying to do as much as they can to serve both issues and for that they should be commended.</p>]]>
</content:encoded>
<link>http://feedproxy.google.com/~r/kimili/journal/~3/u-bVgCUI89k/a-retort-ie8-blacklist-forcing-standards-rendering-opt-in</link>
<pubDate>Fri, 13 Feb 2009 20:17:12 GMT</pubDate>
<dc:creator>Michael Bester</dc:creator>
<guid isPermaLink="false">tag:kimili.com,2009-02-13:492d4839031cf0856f2dca618531715c/88ca0294887078eaceb77eda0eb6b3b4</guid>
<feedburner:origLink>http://kimili.com/journal/a-retort-ie8-blacklist-forcing-standards-rendering-opt-in</feedburner:origLink></item>
<item><title>Kimili Flash Embed 2.0.1 - For Real!</title>
<description>
<![CDATA[<p><span class="opening">I&#8217;m happy to announce that last night I pushed Kimili Flash Embed 2.0.1 live!</span> Utilizing <a href="http://code.google.com/p/swfobject/"><span class="caps">SWFO</span>bject 2.1</a> and taking advantage of all that it has to offer, this new version represents a major overhaul.</p>]]>
</description>
<content:encoded>
<![CDATA[<p><span class="opening">I&#8217;m happy to announce that last night I pushed Kimili Flash Embed 2.0.1 live!</span> Utilizing <a href="http://code.google.com/p/swfobject/"><span class="caps">SWFO</span>bject 2.1</a> and taking advantage of all that it has to offer, this new version represents a major overhaul of <span class="caps">KFE</span> &#8211; in fact, it has been completely rewritten from the ground up. Gone are some of the madding weak points of the 1.x version of the plugin&#8212;Wordpress 2.7 incompatibilities and Textpattern Legacy and Current <span class="caps">SWFO</span>bject modes among them. New to <span class="caps">KFE</span> 2 are a number of things that will make working with <span class="caps">SWF</span>s on your site much easier, such as:</p>

	<ul>
		<li>An integrated <a href="http://kimili.com/plugins/kml_flashembed/#tagGenerator">tag generator</a> to help you build <span class="caps">KFE</span> tags easily.</li>
		<li><a href="http://kimili.com/plugins/kml_flashembed/#configuration">Configuration options</a></li>
		<li>A super easy way to define <a href="http://kimili.com/plugins/kml_flashembed/#altContent">alternate content</a> for your <span class="caps">SWF</span>s.</li>
		<li>All of the newest Flash Player parameters, such as <code>seamlesstabbing</code> and <code>allownetworking</code> are available.</li>
	</ul>

	<p>By the way, in case you&#8217;re curious, 2.0.1 is the first proper release of the <span class="caps">KFE</span> 2.0 branch&#8212;it really should be 2.0. Some troubles I had with the way the <a href="http://wordpress.org/extend/plugins/">Wordpress Plugin Directory</a> during this version&#8217;s development and how it handles versioning necessitated the bump in version numbers to keep Wordpress&#8217; auto plugin updating in sync. Consequently, no <span class="caps">KFE</span> 2.0.0 for Textpattern exists.</p>

	<p>On another note, this version represents the first time Kimili Flash Embed is localizable. I&#8217;ve released it with just US English for now, but if anyone reading this would be willing to do a translation, please <a href="http://kimili.com/contact/">contact me</a>. You&#8217;d be doing a great service by helping the community of plugin users who speak your language.</p>

	<p>Go ahead, check out all the details and download it on the <a href="http://kimili.com/plugins/kml_flashembed/">Kimili Flash Embed homepage</a>.</p>]]>
</content:encoded>
<link>http://feedproxy.google.com/~r/kimili/journal/~3/T8pyExd85-s/kimili-flash-embed-201-for-real</link>
<pubDate>Mon, 19 Jan 2009 03:05:14 GMT</pubDate>
<dc:creator>Michael Bester</dc:creator>
<guid isPermaLink="false">tag:kimili.com,2009-01-19:492d4839031cf0856f2dca618531715c/9e438c75d86708eb7dc405b64767ad67</guid>
<feedburner:origLink>http://kimili.com/journal/kimili-flash-embed-201-for-real</feedburner:origLink></item>
<item><title>Shake</title>
<description>
<![CDATA[<p><a href="http://www.flickr.com/photos/michaelbester/3189361007/"><img src="http://farm4.static.flickr.com/3384/3189361007_1df22eb03b.jpg" title="" alt="" /></a></p>

	<p>It&#8217;s been pretty snowy here in New England as of late, but Kiev doesn&#8217;t mind.</p>]]>
</description>
<content:encoded>
<![CDATA[<p><a href="http://www.flickr.com/photos/michaelbester/3189361007/"><img src="http://farm4.static.flickr.com/3384/3189361007_1df22eb03b.jpg" title="" alt="" /></a></p>

	<p>It&#8217;s been pretty snowy here in New England as of late, but Kiev doesn&#8217;t mind.</p>]]>
</content:encoded>
<link>http://feedproxy.google.com/~r/kimili/journal/~3/vAuB8aZaQ0c/shake</link>
<pubDate>Mon, 12 Jan 2009 18:58:51 GMT</pubDate>
<dc:creator>Michael Bester</dc:creator>
<guid isPermaLink="false">tag:kimili.com,2009-01-12:492d4839031cf0856f2dca618531715c/eb3ceed15a9bb4e4c1883c5de4d1f145</guid>
<feedburner:origLink>http://kimili.com/journal/shake</feedburner:origLink></item></channel>
</rss>
