<?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>Chapter 42 &#187; lwblog</title>
	<atom:link href="http://chapter42.whitewhale.net/tag/lwblog/feed/" rel="self" type="application/rss+xml" />
	<link>http://chapter42.whitewhale.net</link>
	<description></description>
	<lastBuildDate>Thu, 30 Sep 2010 17:20:47 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Coding Ahead of Yourself</title>
		<link>http://chapter42.whitewhale.net/2008/11/24/coding-ahead-of-yourself/</link>
		<comments>http://chapter42.whitewhale.net/2008/11/24/coding-ahead-of-yourself/#comments</comments>
		<pubDate>Mon, 24 Nov 2008 20:41:49 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Behind the scenes]]></category>
		<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[backwards compatibility]]></category>
		<category><![CDATA[bugs]]></category>
		<category><![CDATA[cms]]></category>
		<category><![CDATA[diagnostics]]></category>
		<category><![CDATA[livewhale]]></category>
		<category><![CDATA[lwblog]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[whitewhale]]></category>

		<guid isPermaLink="false">http://chapter42.whaleblogs.net/?p=144</guid>
		<description><![CDATA[When you&#8217;re maintaining a software product which evolves and expands in order to remain competitive and make itself more useful to a user base, it&#8217;s easy to forget to keep all the moving parts in line with changes and new features as you roll them out. However, if this issue isn&#8217;t dealt with, bugs and [...]]]></description>
			<content:encoded><![CDATA[<p>When you&#8217;re maintaining a software product which evolves and expands in order to remain competitive and make itself more useful to a user base, it&#8217;s easy to forget to keep all the moving parts in line with changes and new features as you roll them out. However, if this issue isn&#8217;t dealt with, bugs and performance issues will inevitably arise.</p>
<p><a href="http://www.livewhale.com/">LiveWhale</a>, our CMS, is essentially a module-based system. Individual modules can be provided to our customers on a per-client basis. Each module is a self-contained element, that &#8220;registers&#8221; itself in the CMS framework, thereby establishing its functionality throughout. A module is responsible for creating and managing its own data, but if it is flagged as group owned, access to that data is handled by LiveWhale&#8217;s users and groups system.<span id="more-144"></span></p>
<p>It is, of course, possible for an administrator to manage those users and groups, and should a circumstance arise in which a group should be targeted for deletion, LiveWhale automatically cleans up data associated with that group (whether it is stored in a database or the file system) so that it is not orphaned. (This is in fact the case with any piece of data which &#8220;contains&#8221; additional hierarchical data.)</p>
<p>The mechanism we have in place for this is simple, but it is also flexible. Each piece of associated data that has to be cleaned up by a parent marked for deletion can optionally be given to a handler deletion function. For example, if a piece of news stores an image in the file system, the handler function is activated to clean that up as well.</p>
<p>Eventually we added a global activity log to our CMS, LiveWhale. Activity is associated with a user and a group, making this data group owned. As it turned out, the group deletion mechanism possessed a flaw. LiveWhale&#8217;s internal delete routine initially expected the logic about what a handler function had to do, if anything, to come from the handler function itself. In fact what it needed to do was to first deduce if a handler was optimal for a particular type of data at all. The activity data made this clear, when there was suddenly a need to delete hundreds or thousands of individual pieces of data which were designed to be stored in huge quantity over a long period of time (unlike with news management, for example). Pushing the handler logic up into LiveWhale&#8217;s delete routine made it no longer necessary to perform logic a hundred or thousand times when the result was always going to be the same, and a one-off deletion procedure could alternatively be used for the bulk data.</p>
<p>This drives home the point that building something requires either the proper foresight to know how that system has to conform to conditions that haven&#8217;t yet come about, or ensuring that the foundation you&#8217;ve already built adjusts to appropriately handle new features as you add them. Fortunately, our LiveWhale development process utilizes a variety of monitoring tools and diagnostic tests which inspect the system closely to continually perform a sanity check on the results of code execution over the product&#8217;s development lifetime. This was a case where the system noticed the deletion flaw even before I did.</p>
]]></content:encoded>
			<wfw:commentRss>http://chapter42.whitewhale.net/2008/11/24/coding-ahead-of-yourself/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Screencast Demo of the Week</title>
		<link>http://chapter42.whitewhale.net/2008/11/12/screencast-demo-of-the-week/</link>
		<comments>http://chapter42.whitewhale.net/2008/11/12/screencast-demo-of-the-week/#comments</comments>
		<pubDate>Wed, 12 Nov 2008 19:31:30 +0000</pubDate>
		<dc:creator>Jason</dc:creator>
				<category><![CDATA[Behind the scenes]]></category>
		<category><![CDATA[livewhale]]></category>
		<category><![CDATA[lwblog]]></category>
		<category><![CDATA[screencasts]]></category>
		<category><![CDATA[stuff we like]]></category>
		<category><![CDATA[the Googleverse]]></category>

		<guid isPermaLink="false">http://chapter42.whaleblogs.net/?p=136</guid>
		<description><![CDATA[In the process of developing documentation for LiveWhale, our new CMS, we have begun to record screencasts to demo LW&#8217;s features.  Often it&#8217;s easier to show than tell, when it comes to CMS features; a narrated demonstration lets us inject a little personality.  And it&#8217;s also a lot faster than writing out a how-to page [...]]]></description>
			<content:encoded><![CDATA[<p>In the process of developing documentation for <a title="LiveWhale" href="http://www.livewhale.com" target="_blank">LiveWhale</a>, our new CMS, we have begun to record screencasts to demo LW&#8217;s features.  Often it&#8217;s easier to show than tell, when it comes to CMS features; a narrated demonstration lets us inject a little personality.  And it&#8217;s also a lot faster than writing out a how-to page (although we&#8217;ll have to have written documentation as well, it does seem to be the case that <a title="TinyMCE developer blog" href="http://blog.moxiecode.com/2008/10/06/why-does-open-source-software-lack-documentation/" target="_blank">nobody will actually read it</a>).</p>
<p>Our first effort, <a title="LiveWhale Screencasts:  News Management" href="http://vimeo.com/2119750?pg=embed&amp;sec=2119750" target="_blank">a screencast of LiveWhale&#8217;s news system</a>, leaves much to be desired; it&#8217;s clear that we&#8217;re new at this.  It&#8217;s hard to figure out the right tone of voice (how much humor?  how fast?  etc.), and it took several takes to get through it without messing anything up.  (And we still had to edit the final product a bit.)  I&#8217;m sure it&#8217;s something we&#8217;ll continue to refine and improve as we continue developing LiveWhale&#8217;s documentation.</p>
<p>All of this is to say that I  just watched the most effective screencast demo I&#8217;ve seen in a long time, if not ever.</p>
<p><span id="more-136"></span>Google has just added video chat to its Gmail service.  This is a big deal— not only is it a potential Skype-killer, it opens up the possibility that video chat will become a part of life for all computer users the way it is for Mac people.  (Video chat has been deeply integrated into the Mac for years now; I know several people who have bought their parents Macs solely because it&#8217;s so easy to do long-distance videochats.)</p>
<p>Anyway, the video demo is sublime, wonderful, perfect:</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="344" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="src" value="http://www.youtube.com/v/JFGJRfoK9xQ&amp;color1=0xb1b1b1&amp;color2=0xcfcfcf&amp;fs=1" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/JFGJRfoK9xQ&amp;color1=0xb1b1b1&amp;color2=0xcfcfcf&amp;fs=1" allowfullscreen="true"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://chapter42.whitewhale.net/2008/11/12/screencast-demo-of-the-week/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Converting to Title Case</title>
		<link>http://chapter42.whitewhale.net/2008/10/28/converting-to-title-case/</link>
		<comments>http://chapter42.whitewhale.net/2008/10/28/converting-to-title-case/#comments</comments>
		<pubDate>Tue, 28 Oct 2008 19:10:00 +0000</pubDate>
		<dc:creator>Jason</dc:creator>
				<category><![CDATA[Behind the scenes]]></category>
		<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[livewhale]]></category>
		<category><![CDATA[lwblog]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[Title Case]]></category>
		<category><![CDATA[whitewhale]]></category>

		<guid isPermaLink="false">http://chapter42.whaleblogs.net/?p=122</guid>
		<description><![CDATA[In the process of developing and refining our CMS, the question occasionally arises whether or not we should convert text inputs from format X to format Y.  These questions range from the innocuous and straightforward (should we convert curly quotes to straight quotes?  or vice versa?) to the more insidious (should we correct a misspelling?  should [...]]]></description>
			<content:encoded><![CDATA[<p>In the process of developing and refining <a title="LiveWhale" href="http://www.livewhale.com" target="_blank"><strong>our CMS</strong></a>, the question occasionally arises whether or not we should convert text inputs from format X to format Y.  These questions range from the innocuous and straightforward (should we convert curly quotes to straight quotes?  or vice versa?) to the more insidious (should we correct a misspelling?  should we move close quotes to outside a period?).  </p>
<p>On the one hand, it&#8217;s probably best to let users make mistakes, or format as they wish, and depend on human communication to clear things up— instead of trying to build in a bunch of extra structure designed to cover for mistakes.  It&#8217;s <a title="White Whale CMS conversation" href="http://www.whitewhale.net/content/cms.php" target="_blank">our view</a> that the latter approach leads to bloated, overbuilt CMS systems that discourage accountability.  But at the same time, consistency and coherence of communication across a Web site is a really, really important thing— it is what distinguishes sites that serve as good vehicles for an institution&#8217;s messaging from sites that are just decorated Web pages.</p>
<p>We&#8217;re thinking about this right now because we are considering automatically converting the titles of news items in LiveWhale to Title Case.  The following three news headlines, though identical in content, send very different messages:</p>
<p>1.  <strong>White Whale Web Services to Release New Content Management System, Revolutionize CMS Industry<br />
 </strong></p>
<p>2.  <strong>White Whale Web Services to release new content management system, revolutionize CMS industry<br />
 </strong></p>
<p>3.  <strong>WHITE WHALE WEB SERVICES TO RELEASE NEW CONTENT MANAGEMENT SYSTEM, REVOLUTIONIZE CMS INDUSTRY<br />
 </strong></p>
<p>Although there might be a justification for #3 in a particular Web design, it&#8217;s clear that you wouldn&#8217;t want a user to enter news headlines that way.  For one thing, caps are just hard to read in many contexts; but on top of that, it&#8217;s always easy to {text-transform:uppercase} if you need caps.  My general preference as a design snob would be for #2, but that&#8217;s clearly not common practice— as much as I enjoy headlines like <a href="http://www.timesonline.co.uk/tol/news/world/us_and_americas/us_elections/article5031835.ece" target="_blank">this</a> (or <a title="Why smaller is better" href="http://www.whitewhale.net/content/small.php" target="_blank">this</a>), that style is much more common in European news than American.</p>
<p>It&#8217;s also the case that styles #1 and #2 look terrible next to each other:</p>
<ul>
<li><strong>White Whale Web Services to Release New Content Management System, Revolutionize CMS Industry</strong></li>
<li><strong>Other CMS providers cower in fear</strong></li>
</ul>
<p>So.  Should we let users do what they will, and enter headlines according to any system they prefer?  Or should we legislate something?  It seems pretty clear from the above examples that— at least in the particular case of news headlines— legislating is the way to go.  And if you&#8217;re going to require a particular format for headlines, it seems pretty clear that Title Case Is Your Only Option.</p>
<p>So what&#8217;s the best way to do it?</p>
<p><span id="more-122"></span>You could, for example, simply ask the user to format the headline a particular way:</p>
<p>___________________________________________________<br />
<em><span style="color: #999999;">Please use Title Case for headlines.</span></em></p>
<p>Or, a bit more diplomatically, you could provide an example:</p>
<p>___________________________________________________<br />
<em><span style="color: #999999;">Example: Stock Market Soars on Rumors of Bailout</span></em></p>
<div>Either of those would be likely to get you good results a majority of the time. But this approach has its drawbacks.  Obviously, it doesn&#8217;t ensure that you&#8217;ll get the results you want; some people (including me, probably) would tend to ignore instructions of this sort and enter headlines the way we want to.  And in a more philosophical sense, it requires exposing a behind-the-scenes decision in the help text of the interface, which I don&#8217;t like&#8230; help text ought to help you fill out the form, not preach about how your content should be styled.  Ideally those decisions should be invisible, unless they&#8217;re important enough to require input from the user.  In other words— <em>we shouldn&#8217;t have to provide instructions about using Title Case unless we felt users might have legitimate reasons not to. </em>  Otherwise it looks like a limitation of the CMS.</div>
<p>Alternatively, we could let users enter any headlines they want, and control the front end display with CSS&#8217;s <a title="text-transform property" href="http://www.w3schools.com/Css/pr_text_text-transform.asp" target="_blank">text-transform property</a>.  But that&#8217;s not going to work either, because these are the only options we have:</p>
<table style="border-collapse:collapse;" border="1" cellspacing="0" cellpadding="4">
<tbody>
<tr>
<th align="left" valign="top">Value</th>
<th align="left" valign="top">Description</th>
</tr>
<tr>
<td valign="top">none</td>
<td valign="top">Default. Defines normal text, with lower case letters and capital letters</td>
</tr>
<tr>
<td valign="top">capitalize</td>
<td valign="top">Each word in a text starts with a capital letter</td>
</tr>
<tr>
<td valign="top">uppercase</td>
<td valign="top">Defines only capital letters</td>
</tr>
<tr>
<td valign="top">lowercase</td>
<td valign="top">Defines no capital letters, only lower case letters</td>
</tr>
</tbody>
</table>
<p>Title Case Is Great, But Not If You Capitalize Every Word In The Sentence.  Otherwise It Looks Hacky.  The text-transform property doesn&#8217;t have the kind of sensitivity you&#8217;d want in a good Title Case headline.  I am personally big on punctuation and capitalization styles that reflect spoken rhythms— that&#8217;s why, no matter what Douglas says, I always put a space after an em dash— and capitalizing &#8220;the,&#8221; &#8220;and,&#8221; etc. ruins the spoken rhythm of a headline.</p>
<p>So the only approach left— assuming you want to engage this issue at all!— is to automatically convert headlines into Title Case on the back end.  And that&#8217;s the whole reason I started this post in the first place.</p>
<p>It turns out that converting to Title Case is nowhere near as simple as you&#8217;d imagine.  Sure, we know that you don&#8217;t capitalize &#8220;the&#8221; or &#8220;a&#8221; or prepositions, etc.  But how about sentences like these?</p>
<p><strong>Read markdown_rules.txt to Find Out How _Underscores Around Words_ Will Be Interpreted</strong></p>
<p><strong>Notes and Observations Regarding Apple’s Announcements From ‘The Beat Goes On’ Special Event<br />
</strong></p>
<p>These sentences are from <a title="Title Case test suite" href="http://individed.com/code/to-title-case/tests.html" target="_blank">a suite of test cases</a> for a <a title="Daring Fireball: Title Case" href="http://daringfireball.net/2008/08/title_case_update" target="_blank">Title Case script</a> originally created by John Gruber of <a title="Daring Fireball" href="http://daringfireball.net/" target="_blank">Daring Fireball</a>.  We are planning to use <a title="Convert to Title Case (PHP)" href="http://files.nanovivid.com/wordpress/title-case.php" target="_blank">the PHP version of the script</a> to convert some of Southwestern&#8217;s old news headlines (originally entered with uppercase headlines) to a thoughtful Title Case, and are considering using it when headlines are created in LiveWhale in the first place.  In the process we discovered yet another odd, fascinating corner of the world of CMS development to geek out in.</p>
]]></content:encoded>
			<wfw:commentRss>http://chapter42.whitewhale.net/2008/10/28/converting-to-title-case/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Introducing LiveWhale News</title>
		<link>http://chapter42.whitewhale.net/2008/08/15/introducing-livewhale-news/</link>
		<comments>http://chapter42.whitewhale.net/2008/08/15/introducing-livewhale-news/#comments</comments>
		<pubDate>Fri, 15 Aug 2008 20:45:59 +0000</pubDate>
		<dc:creator>Donald</dc:creator>
				<category><![CDATA[Behind the scenes]]></category>
		<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[cms]]></category>
		<category><![CDATA[interface]]></category>
		<category><![CDATA[livewhale]]></category>
		<category><![CDATA[lwblog]]></category>
		<category><![CDATA[usability]]></category>

		<guid isPermaLink="false">http://chapter42.whaleblogs.net/?p=88</guid>
		<description><![CDATA[I&#8217;ve called this post &#8220;Introducing LiveWhale News&#8221; because I&#8217;ll leave &#8220;Introducing LiveWhale&#8221; to Jason. It&#8217;s that big behind-the-scenes project we&#8217;ve been hinting about for a bit, and there&#8217;s quite a lot to say.
But at the risk of stealing some thunder from that announcement, I&#8217;d like to show off something that we&#8217;ve been spending a lot [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve called this post &#8220;Introducing LiveWhale News&#8221; because I&#8217;ll leave &#8220;Introducing LiveWhale&#8221; to Jason. It&#8217;s that big behind-the-scenes project we&#8217;ve been hinting about for a bit, and there&#8217;s quite a lot to say.</p>
<p>But at the risk of stealing some thunder from that announcement, I&#8217;d like to show off something that we&#8217;ve been spending a lot of time on:<a href="http://www.whitewhale.net/wordpress/wp-content/uploads/2008/08/livewhale_news.jpg"><img class="aligncenter size-full wp-image-89" title="LiveWhale News Page" src="http://www.whitewhale.net/wordpress/wp-content/uploads/2008/08/livewhale_news.jpg" alt="LiveWhale: Edit Story" width="500" height="427" /></a></p>
<p>This is the add-a-news-story page of LiveWhale, the CMS we&#8217;ve developed as an answer to problems posed in our infamous (among our clients, anyway) <a href="http://www.whitewhale.net/content/cms.php">content management manifesto</a>. In later posts I&#8217;ll go into some detail about specific interface choices we&#8217;ve made (a personal favorite is the flowchart behind attaching images to news stories), but for now I&#8217;ll talk about what we <em>didn&#8217;t</em> do.<span id="more-88"></span></p>
<p>One of the main problems with most enterprise content management solutions is their unapproachability. A simple task like a creation of a news item can be buried by layers of menus, technical jargon, and&#8211;let&#8217;s be honest&#8211;really ugly interfaces. It&#8217;s the type of interface that savvy users master through days or weeks of training and non-savvy users end up navigating by way of post-its on the side of their monitors. But you need those weeks to worry about everything else involved in your website launch; you need that space on the side of your monitor for pictures of your kids.</p>
<p>We set out to create an interface that minimizes the distance between what the user <em>wants to accomplish </em>and what she <em>has to do</em>. This gap is huge huge in most enterprise CMSes. Adding or editing a news story is a task that every staff member at your institution understands intuitively; why does it so often feel like piecemeal data entry?</p>
<p>Making the user click &#8220;Attach resource&#8221; when she wants to add an image creates a cognitive separation where one needn&#8217;t exist. So all of our instructions and labels are in plain English. Steps like having to enter the story body on one page and the contact info on another&#8211;or burying things in menus, or presenting disparate information as visually equal&#8211;create a similarly artificial distance. That&#8217;s why our news edit page looks almost like a published news page: we want the headline to jump out at you and the image to appear at reasonable size, and we want everything that appears on the frontend to appear here.</p>
<p>By minimizing this distance between the user&#8217;s goals and the user&#8217;s processes, we think we&#8217;ve made LiveWhale a snap to use regardless of where you fall on the scale of technical knowhow. One of these days we&#8217;ll give more of a detailed tour; but, in the meantime, let us know what you think.</p>
]]></content:encoded>
			<wfw:commentRss>http://chapter42.whitewhale.net/2008/08/15/introducing-livewhale-news/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Resizing images to fit</title>
		<link>http://chapter42.whitewhale.net/2008/07/22/resizing-images-to-fit/</link>
		<comments>http://chapter42.whitewhale.net/2008/07/22/resizing-images-to-fit/#comments</comments>
		<pubDate>Tue, 22 Jul 2008 15:50:40 +0000</pubDate>
		<dc:creator>Donald</dc:creator>
				<category><![CDATA[Behind the scenes]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[images]]></category>
		<category><![CDATA[livewhale]]></category>
		<category><![CDATA[lwblog]]></category>
		<category><![CDATA[photos]]></category>
		<category><![CDATA[resizing]]></category>

		<guid isPermaLink="false">http://chapter42.whaleblogs.net/?p=68</guid>
		<description><![CDATA[Last week, we flew Alex out to the Bay Area for some company togetherness and to devote some serious time to the aforementioned yet still-unannounced internal project. An also-secret major feature of said project required us to use PHP to place arbitrarily-selected images in arbitrarily-sized spaces (without, of course, unattractively stretching or squishing the image).
With [...]]]></description>
			<content:encoded><![CDATA[<p>Last week, we flew Alex out to the Bay Area for some company togetherness and to devote some serious time to the aforementioned yet still-unannounced internal project. An also-secret major feature of said project required us to use PHP to place arbitrarily-selected images in arbitrarily-sized spaces (without, of course, unattractively stretching or squishing the image).</p>
<p>With some thought, we were able to come up with a taxonomy of content photo sizing:<span id="more-68"></span></p>
<ol>
<li>Constrained horizontally (e.g. in a sidebar):<br />
<a href="http://www.whitewhale.net/wordpress/wp-content/uploads/2008/07/constrain_horizontal.jpg"><img class="alignnone size-medium wp-image-69" title="constrain_horizontal" src="http://www.whitewhale.net/wordpress/wp-content/uploads/2008/07/constrain_horizontal.jpg" alt="Constrained horizontally" width="124" height="104" /></a><a href="http://www.whitewhale.net/wordpress/wp-content/uploads/2008/07/constrain_horizontal.jpg"><br />
</a></li>
<li>Constrained vertically (e.g. to align alongside text):<br />
<a href="http://www.whitewhale.net/wordpress/wp-content/uploads/2008/07/contrain_vertical.jpg"><img class="alignnone size-medium wp-image-73" title="contrain_vertical" src="http://www.whitewhale.net/wordpress/wp-content/uploads/2008/07/contrain_vertical.jpg" alt="Constrained vertically" width="224" height="104" /></a></li>
<li>Constrained both horizontally and vertically within a box:<br />
<a href="http://www.whitewhale.net/wordpress/wp-content/uploads/2008/07/constrain_both_nocrop.jpg"><img class="alignnone size-medium wp-image-71" title="constrain_both_nocrop" src="http://www.whitewhale.net/wordpress/wp-content/uploads/2008/07/constrain_both_nocrop.jpg" alt="" width="104" height="104" /></a></li>
<li>Constrained both horizontally and vertically to fill the box, with the edges lobbed off automatically (e.g. when needed as specific design element):<br />
<a href="http://www.whitewhale.net/wordpress/wp-content/uploads/2008/07/contrain_both_crop.jpg"><img class="alignnone size-medium wp-image-72" title="contrain_both_crop" src="http://www.whitewhale.net/wordpress/wp-content/uploads/2008/07/contrain_both_crop.jpg" alt="Constrained both horizontally and vertically, and cropped" width="146" height="104" /></a></li>
</ol>
<p>I thought the fourth case would be the only troublesome one, but we knocked out uses 1, 2, and 4 rather quickly. Use 3, however, proved to be a problem; we just couldn&#8217;t get it to size appropriately for every test case. Unlike the others, it was unclear what dimension to constrain to: it varies not only for the same image placed in different spaces, but also for different images in the same-sized space:<br />
<a href="http://www.whitewhale.net/wordpress/wp-content/uploads/2008/07/4cases.jpg"><img class="alignnone size-medium wp-image-70" title="4cases" src="http://www.whitewhale.net/wordpress/wp-content/uploads/2008/07/4cases.jpg" alt="Four different uses" width="265" height="247" /></a></p>
<p>It was one of those problems that is as easy to describe&#8211;&#8221;fit the image in the box&#8221;&#8211;but hard to wrap your mind around programatically. We knew there must be simple logic to it, but despite examples in Photoshop and repeatedly walking through the problem we were <a href="http://www.whitewhale.net/wordpress/wp-content/uploads/2008/07/whiteboard.jpg">having trouble making sense of it</a>. Finally, we realized that the key comparison is the ratios of the images: if height<sub>original</sub>:width<sub>original</sub> &gt; height<sub>target</sub>:width<sub>target</sub> constrain by height; otherwise, constrain by width. We actually managed to make an educated guess at the solution before we fully understood the problem, but we did <a href="http://www.whitewhale.net/wordpress/wp-content/uploads/2008/07/penandpaper.jpg">some old-fashioned pen-and-paper work</a> to prove ourselves right.</p>
<p>The ins-and-outs of this backend code and logic no doubt are pretty dry to much of our audience. But this sort of problem is one of my favorite parts of my job: working through the logic of it is completely fun stuff to my inner geek, but more importantly there&#8217;s a great satisfaction in knowing you&#8217;ve found that killer solution. When you get home, it&#8217;s hard to explain to your significant other why spending the afternoon on this one simple function wasn&#8217;t a waste of time&#8211;heck, sometimes it&#8217;s tough to get that across to your boss. But here&#8217;s a case where, by taking that time, we were able to both clearly define all the ways we employ content photos on the design-side and create a single function that quickly fits any given photo to those uses. And that not only solves an immediate goal, but we can take that solution with us. We nailed it. And we may never need to think about image sizing again.</p>
]]></content:encoded>
			<wfw:commentRss>http://chapter42.whitewhale.net/2008/07/22/resizing-images-to-fit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Internet Explorer 6 in web applications</title>
		<link>http://chapter42.whitewhale.net/2008/07/09/internet-explorer-6-in-web-applications/</link>
		<comments>http://chapter42.whitewhale.net/2008/07/09/internet-explorer-6-in-web-applications/#comments</comments>
		<pubDate>Wed, 09 Jul 2008 18:34:25 +0000</pubDate>
		<dc:creator>Donald</dc:creator>
				<category><![CDATA[Behind the scenes]]></category>
		<category><![CDATA[37signals]]></category>
		<category><![CDATA[ie6]]></category>
		<category><![CDATA[internet explorer]]></category>
		<category><![CDATA[livewhale]]></category>
		<category><![CDATA[lwblog]]></category>
		<category><![CDATA[whitewhale]]></category>

		<guid isPermaLink="false">http://chapter42.whaleblogs.net/?p=63</guid>
		<description><![CDATA[About a month ago, we reached one of those crossroads in the development of our (coming very soon) content management solution. Our development process is typically to develop a perfect standards-compliant site and then reverse-engineer a working Internet Explorer copy out of that&#8211;usually through painstaking pixel-by-pixel corrections of obscure bugs in IE-specific stylesheets, but also [...]]]></description>
			<content:encoded><![CDATA[<p>About a month ago, we reached one of those crossroads in the development of our (coming <em>very</em> soon) content management solution. Our development process is typically to develop a perfect standards-compliant site and then reverse-engineer a working Internet Explorer copy out of that&#8211;usually through painstaking pixel-by-pixel corrections of obscure bugs in IE-specific stylesheets, but also in rare cases where we had to make compromises with the design or markup of the page.</p>
<p>But IE stylesheets can only get you so far. When working with a public-facing website design you just need to get it right once: we make sure the structure is flexible and adaptable and forward-looking, but mainly we build to the best standards of the current day. But because development of our backend solution will be continuous (that&#8217;s a hint about a major feature, by the way), continuing to tie ourselves to IE6&#8217;s sundry limitations would be crippling down the road.<span id="more-63"></span></p>
<p>All this is to say that we&#8217;ve made a careful and tentative decision to drop IE6 support for the backend web app. The software is seven years old and was buggy when it was released; its replacement is already two years old. Still, requiring a more modern browser felt somewhat risky: about 20% of visitors to the public pages of a small liberal arts college are still on IE6; at a major research university, the portion is slightly higher. But we decided that a fully-fledged rich &#8220;web application&#8221; can have different requirements than a public site, and now we see that we&#8217;re in good company: both Apple <a href="http://www.37signals.com/svn/posts/1072-apples-mobileme-drops-support-for-ie-6">in MobileMe</a>) and 37signals (<a href="http://37signals.blogs.com/products/2008/07/basecamp-phasin.html">in all their apps</a>) have decided to drop support for IE6. Hopefully this will be the start of a sorely-needed chain-reaction&#8211;it&#8217;s clear that the catalyst is not going to come from Microsoft, which is <a href="http://blogs.msdn.com/ie/archive/2008/05/05/ie-and-xpsp3.aspx">not at all interested</a> in pushing the upgrade, even with version 8 on the horizon.</p>
<p>So if you&#8217;re using IE6, might we suggest an upgrade to <a href="http://www.getfirefox.com/">Firefox</a>, <a href="http://www.apple.com/safari/">Safari</a>, or <a href="http://microsoft.com/ie/">IE7</a>? Your web experience will be leagues better. And you&#8217;ll be able to play with our new toy as soon as we release it, just around the corner.</p>
]]></content:encoded>
			<wfw:commentRss>http://chapter42.whitewhale.net/2008/07/09/internet-explorer-6-in-web-applications/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

