<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" xml:lang="en-us"><title type="text">SonSpring</title>
<subtitle type="text">SonSpring is a small, Christian web studio that specializes in creating sites for churches and non-profits. The mission statement and fervent prayer is the utmost would be done to glorify the Lord Jesus Christ through web development.</subtitle>

<link rel="alternate" type="text/html" href="http://sonspring.com/" />
<id>tag:sonspring.com,2005:7dfb1939175daba4ae7c906f4e24be92</id>
<generator uri="http://textpattern.com/" version="4.2.0">Textpattern</generator>
<updated>2009-11-20T21:27:48Z</updated>
<author>
		<name>Nathan Smith</name>
		
		<uri>http://sonspring.com/</uri>
</author>

<geo:lat>43.627734</geo:lat><geo:long>-116.207567</geo:long><link rel="self" href="http://sonspring.com/rss/" type="application/atom+xml" /><feedburner:browserFriendly>SonSpring is a small, Christian web design and graphics studio that specializes in creating sites for churches and non-profit organizations. The mission statement and fervent prayer is that the utmost would be done to glorify the Lord Jesus Christ.</feedburner:browserFriendly><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><entry>
		<author>
			<name>Nathan Smith</name>
		</author>
		<published>2009-10-30T14:34:04Z</published>
		<updated>2009-11-13T20:30:43Z</updated>
		<title type="html">jQuery Englightenment</title>
		<link rel="alternate" type="text/html" href="http://sonspring.com/journal/jquery-englightenment" />
		<id>tag:sonspring.com,2009-10-29:7dfb1939175daba4ae7c906f4e24be92/2c6d55d388d044ad6f653cd870e9c62d</id>
		<category term="Web-Dev" />
		
		<content type="html">
&lt;p&gt;&lt;a href="http://jqueryenlightenment.com/"&gt;&lt;img src="http://sonspring.com/images/225.gif" title="" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

	&lt;h3&gt;History&lt;/h3&gt;

	&lt;p&gt;Several years ago, I landed a job as a junior designer / front-end developer, working with and learning from &lt;a href="http://design-spectacle.com/"&gt;Hugh Griffith&lt;/a&gt; and &lt;a href="http://codylindley.com/"&gt;Cody Lindley&lt;/a&gt;, respectively. The former taught me how to have an eye for &amp;#8220;big-D&amp;#8221; design, beyond just the visuals, and the latter pushed me to write more modular, elegant code.&lt;/p&gt;

	&lt;p&gt;While we have all since moved on to other jobs, these guys instilled in me the desire and drive to constantly be self-teaching. Or, as the saying goes: &amp;#8220;The more you know, the more you learn how much there is you don&amp;#8217;t know.&amp;#8221;&lt;/p&gt;

	&lt;p&gt;I say all that not necessarily to be all nostalgic, but to prefix the following review of Cody&amp;#8217;s book &lt;a href="http://jqueryenlightenment.com/"&gt;jQuery Enlightenment&lt;/a&gt; with a bit of back-story. Also, let me say as a disclaimer that I was a tech editor of this book. So, while I&amp;#8217;m obviously biased, be assured that I am also thoroughly familiar with the text. Oh, and in case you&amp;#8217;re wondering, I have no financial stake in the book&amp;#8217;s success. This book is self-published by Cody himself. No money changed hands between us.&lt;/p&gt;

 &lt;hr /&gt;

	&lt;h3&gt;Review&lt;/h3&gt;

	&lt;p&gt;I initially jumped at the opportunity to be a tech reviewer because I thought I&amp;#8217;d learn a thing or two. Little did I know that I my eyes would be opened, not only to new depths in jQuery, but the JavaScript language itself. Truly, an &lt;em&gt;enlightening&lt;/em&gt; experience indeed. While I consider myself proficient at JavaScript, Cody is a luminary &amp;#8211; deriving value from the slightest code nuances.&lt;/p&gt;

	&lt;p&gt;For instance, while I knew how to use jQuery chaining, Cody&amp;#8217;s explanations take it to a whole new level. I find myself looking for new ways to improve code execution, rather than start a new element query. Why, you ask? Well, because jQuery almost always returns &lt;code&gt;this&lt;/code&gt; as a reference to the last-used element, you can continue from where you left off, rather than constantly grabbing at elements you already have.&lt;/p&gt;

	&lt;p&gt;Most of us are probably familiar with traversing &lt;em&gt;down&lt;/em&gt; into the scope of an element chain, because that is how &lt;span class="caps"&gt;CSS&lt;/span&gt; works.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;#id_name .tier_1 .tier_2 .tier_3 { ... }
&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;But, what&amp;#8217;s cool about jQuery is that you can traverse downward, do something with interior elements, and after that, put &lt;em&gt;back&lt;/em&gt; the onion layers (so to speak) and work with the parent element(s) again. Here&amp;#8217;s how someone might typically write chained jQuery code &amp;#8211; indentation indicates nested elements.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;// Example 1: This is slow.
&lt;/code&gt;
&lt;code&gt;$(&amp;#39;&amp;lt;div id=&amp;quot;id_name&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;#39;).appendTo(&amp;#39;body&amp;#39;);
&lt;/code&gt;
&lt;code&gt;$(&amp;#39;#id_name&amp;#39;)
    .append(&amp;#39;&amp;lt;div class=&amp;quot;tier_1&amp;quot;&amp;gt;Tier 1&amp;lt;/div&amp;gt;&amp;#39;)
        .append(&amp;#39;&amp;lt;div class=&amp;quot;tier_2&amp;quot;&amp;gt;Tier 2&amp;lt;/div&amp;gt;&amp;#39;)
            .append(&amp;#39;&amp;lt;div class=&amp;quot;tier_3&amp;quot;&amp;gt;Tier 3&amp;lt;/div&amp;gt;&amp;#39;);
&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;Did you spot the inefficiencies? In example 1, there&amp;#8217;s no reason to get that &lt;code&gt;#id_name&lt;/code&gt; a second time, because we had it the first time around.&lt;/p&gt;

	&lt;p&gt;In example 2, the parent &lt;code&gt;div&lt;/code&gt; is first inserted into the body, then the child elements are populated one after another, incurring an expense each time.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;// Example 2: This is slow, too.
&lt;/code&gt;
&lt;code&gt;$(&amp;#39;body&amp;#39;).append(&amp;#39;&amp;lt;div id=&amp;quot;id_name&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;#39;)
    .append(&amp;#39;&amp;lt;div class=&amp;quot;tier_1&amp;quot;&amp;gt;Tier 1&amp;lt;/div&amp;gt;&amp;#39;)
        .append(&amp;#39;&amp;lt;div class=&amp;quot;tier_2&amp;quot;&amp;gt;Tier 2&amp;lt;/div&amp;gt;&amp;#39;)
            .append(&amp;#39;&amp;lt;div class=&amp;quot;tier_3&amp;quot;&amp;gt;Tier 3&amp;lt;/div&amp;gt;&amp;#39;);
&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;Instead, that code could be written to perform significantly faster, by causing only a single modification to the overall document.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;// Example 3: Bundled together = Fast!
&lt;/code&gt;
&lt;code&gt;$(&amp;#39;&amp;lt;div id=&amp;quot;id_name&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;#39;)
    .append(&amp;#39;&amp;lt;div class=&amp;quot;tier_1&amp;quot;&amp;gt;Tier 1&amp;lt;/div&amp;gt;&amp;#39;)
        .append(&amp;#39;&amp;lt;div class=&amp;quot;tier_2&amp;quot;&amp;gt;Tier 2&amp;lt;/div&amp;gt;&amp;#39;)
            .append(&amp;#39;&amp;lt;div class=&amp;quot;tier_3&amp;quot;&amp;gt;Tier 3&amp;lt;/div&amp;gt;&amp;#39;)
.appendTo(&amp;#39;body&amp;#39;);
&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;This operation can be faster still, by only ever calling &lt;code&gt;.append()&lt;/code&gt; once.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;// Example 4: Single string = Fastest!
&lt;/code&gt;
&lt;code&gt;$(&amp;#39;body&amp;#39;).append(&amp;#39;&amp;lt;div id=&amp;quot;id_name&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;tier_1&amp;quot;&amp;gt;Tier 1&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;tier_2&amp;quot;&amp;gt;Tier 2&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;tier_3&amp;quot;&amp;gt;Tier 3&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;#39;);
&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;That way, as you construct your new markup, you do so as a single fragment, and then insert it into the &lt;span class="caps"&gt;DOM&lt;/span&gt;. It&amp;#8217;s the little things like that, which can add up to create a more seamless user experience for your sites and web apps.&lt;/p&gt;

 &lt;hr /&gt;

	&lt;h3&gt;Verdict&lt;/h3&gt;

	&lt;p&gt;Without belaboring the point with tons more code examples, let me say this book is chock-full with helpful gems of knowledge, all of which Cody has cleverly made testable live via &lt;a href="http://jsbin.com/"&gt;&lt;span class="caps"&gt;JSB&lt;/span&gt;in&lt;/a&gt;. Chances are, if you&amp;#8217;re a web designer, you got started with jQuery because it looks and works (for the most part) like &lt;span class="caps"&gt;CSS&lt;/span&gt;. Or, maybe you&amp;#8217;re a developer wanting to delve in even further.&lt;/p&gt;

	&lt;p&gt;With the lessons from &lt;a href="http://jqueryenlightenment.com/"&gt;jQuery Enlightenment&lt;/a&gt; in your arsenal, you will be able to write code that not just gets the job done, but does it most efficiently. If you&amp;#8217;re ready to take your jQuery projects from good to great, this book will help you elevate your skill-set to that next level. You&amp;#8217;ll quickly find yourself wielding jQuery more as a familiar tool, instead of a mysterious contraption.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sonspring?a=jXvkOOngrmI:M4QlQgcq5CM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sonspring?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sonspring?a=jXvkOOngrmI:M4QlQgcq5CM:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sonspring?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>
</entry>
<entry>
		<author>
			<name>Nathan Smith</name>
		</author>
		<published>2009-09-25T06:32:51Z</published>
		<updated>2009-10-03T05:51:41Z</updated>
		<title type="html">jQuery Desktop</title>
		<link rel="alternate" type="text/html" href="http://sonspring.com/journal/jquery-desktop" />
		<id>tag:sonspring.com,2009-09-19:7dfb1939175daba4ae7c906f4e24be92/0d4b2d0b1c76e3f1d8daf357e31f27a0</id>
		<category term="Tutorials" />
		
		<content type="html">
&lt;p&gt;&lt;a href="http://desktop.sonspring.com/"&gt;&lt;img src="http://sonspring.com/images/219.jpg" title="jQuery Desktop" alt="jQuery Desktop" /&gt;&lt;/a&gt;&lt;/p&gt;

	&lt;p&gt;&lt;strong&gt;jQuery Desktop:&lt;/strong&gt; &lt;a href="http://desktop.sonspring.com/"&gt;View Example&lt;/a&gt; | &lt;a href="http://bitbucket.org/nathansmith/jquery-desktop/"&gt;Repository + Download&lt;/a&gt; (136 KB)&lt;/p&gt;

	&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Special thanks to &lt;a href="http://adrian-rodriguez.net/"&gt;Adrian Rodriguez&lt;/a&gt; for the wallpaper image.&lt;/p&gt;

 &lt;hr /&gt;

	&lt;p&gt;Life has finally slowed down a bit lately. I recently finished grad school, finally obtaining an &lt;a href="http://en.wikipedia.org/wiki/Master_of_Divinity"&gt;MDiv&lt;/a&gt; degree. To celebrate, my wife and I took our 8-month old son to visit my parents. When I returned to Dallas, they stayed there for an additional week. With some unusual down-time to myself in the evenings, I decided to build what I&amp;#8217;m simply referring to as &lt;a href="http://desktop.sonspring.com/"&gt;jQuery Desktop&lt;/a&gt;.&lt;/p&gt;

	&lt;p&gt;It is a proof of concept demo, mixing what I consider to be the best aspects of Mac + Windows interfaces. This inclusion of a top menu bar and a bottom task bar has always been something I liked about &lt;a href="http://www.ubuntu.com/"&gt;Ubuntu&lt;/a&gt;. Anyway, apologies in advance for this not being a direct copy of a single operating system.&lt;/p&gt;

	&lt;p&gt;It is worth noting that a browser-based desktop is not a new concept. There have been plenty of demos, the first of which I remember seeing via &lt;a href="http://www.extjs.com/deploy/dev/examples/desktop/desktop.html"&gt;ExtJS&lt;/a&gt;. Also, be aware that throughout this tutorial, when I say &lt;strong&gt;window&lt;/strong&gt; I am referring to a faux desktop window, not the global &lt;code&gt;window&lt;/code&gt; object in JavaScript.&lt;/p&gt;

 &lt;hr /&gt;

	&lt;h3&gt;Visuals&lt;/h3&gt;

	&lt;p&gt;As mentioned before, &lt;a href="http://adrian-rodriguez.net/"&gt;Adrian Rodriguez&lt;/a&gt; lent me the use of one of his beautiful wallpaper images, with permission to include it with this demo. The desktop icons are courtesy of the &lt;a href="http://tango.freedesktop.org/"&gt;Tango Desktop Project&lt;/a&gt;, an icon bundle made specifically for use in open source projects.&lt;/p&gt;

	&lt;p&gt;The &lt;a href="http://firehost.com/" title="Secure Hosting"&gt;FireHost&lt;/a&gt; logo is of course their copyright, used as a hat-tip for being an awesome provider. I did the remaining graphics, which consist mainly of minor background images, using a pre-release of the next-gen &lt;a href="http://www.adobe.com/products/fireworks/"&gt;Adobe Fireworks&lt;/a&gt;.&lt;/p&gt;

 &lt;hr /&gt;

	&lt;h3&gt;&lt;span class="caps"&gt;CSS&lt;/span&gt;&lt;/h3&gt;

	&lt;p&gt;The rest of the eye-candy is handled via &lt;span class="caps"&gt;CSS&lt;/span&gt;, which involved extensive use of &lt;code&gt;z-index&lt;/code&gt; to get things positioned just so. It probably goes without saying, but this demo obviously will bomb in IE6, but works just fine in IE7 and IE8.&lt;/p&gt;

	&lt;p&gt;While I don&amp;#8217;t want to bore you with all the details, especially when this code is freely available to peruse, I did want to call out a few specifics. First off, I attempted to write modular styles, a technique that has been dubbed &lt;a href="http://www.slideshare.net/stubbornella/what-is-object-oriented-css"&gt;object oriented &lt;span class="caps"&gt;CSS&lt;/span&gt;&lt;/a&gt; by Yahoo web developer extrodinaire &lt;a href="http://www.stubbornella.org/"&gt;Nicole Sullivan&lt;/a&gt;.&lt;/p&gt;

	&lt;p&gt;When I first saw her presentation on OO concepts in &lt;span class="caps"&gt;CSS&lt;/span&gt;, I turned to my coworker and said: &amp;#8220;That&amp;#8217;s what we&amp;#8217;ve been doing. Now there&amp;#8217;s a name for it.&amp;#8221; This was the approach I used when building the &lt;a href="http://960.gs/"&gt;960 Grid System&lt;/a&gt;. While there are no grids in this demo, here&amp;#8217;s an example of what I&amp;#8217;m talking about&amp;#8230;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;.abs {
    position: absolute;
    top: auto;
    left: auto;
    right: auto;
    bottom: auto;
}
&lt;/code&gt;
&lt;code&gt;#bar_top,
#bar_bottom {
    left: 0;
    right: 0;
}
&lt;/code&gt;
&lt;code&gt;#bar_top {
    top: 0;
}
&lt;/code&gt;
&lt;code&gt;#bar_bottom {
    bottom: 0;
}
&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;Example &lt;span class="caps"&gt;HTML&lt;/span&gt;&amp;#8230;&lt;/p&gt;

	&lt;p&gt;&lt;code&gt;&amp;lt;div class=&amp;quot;abs&amp;quot; id=&amp;quot;bar_top&amp;quot;&amp;gt;...&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/p&gt;

	&lt;p&gt;Because it is often a pain to type out repetitious style declarations, and easy to forget to define something that you are not targeting specifically, using an OO approach helps to avoid extra typing and mitigates forgetfulness.&lt;/p&gt;

	&lt;p&gt;In the case of this demo, I make sure to always define &lt;code&gt;auto&lt;/code&gt; if not setting a specific value for absolutely positioned elements. In my experience, IE doesn&amp;#8217;t do too well if those are left to chance. This ensures it renders correctly.&lt;/p&gt;

	&lt;h3&gt;Progressive Enhancement&lt;/h3&gt;

	&lt;p&gt;For those browsers that support it, namely Firefox and Safari, you will notice there a slight visual enhancements, such as rounded corners. Also, when hovering over a window controls &amp;#8211; like minimize, resize, close &amp;#8211; you will notice a slight glow via &lt;code&gt;box-shadow&lt;/code&gt;. Here&amp;#8217;s a comparison, zoomed 200%&amp;#8230;&lt;/p&gt;

	&lt;p&gt;&lt;img src="http://sonspring.com/images/221.gif" title="Firefox + Safari - rounded corners + box-shadow" alt="Firefox + Safari - rounded corners + box-shadow" /&gt;&lt;/p&gt;

	&lt;p&gt;&lt;img src="http://sonspring.com/images/222.gif" title="Opera + Internet Explorer - no rounded corners / box-shadow" alt="Opera + Internet Explorer - no rounded corners / box-shadow" /&gt;&lt;/p&gt;

 &lt;hr /&gt;

	&lt;h3&gt;Layers&lt;/h3&gt;

	&lt;p&gt;There are essentially four planes at work, to sell the desktop effect. As shown in the diagram below, the lowermost layer is the wallpaper, above which sit the top bar, desktop layer, and the bottom bar. The upper layers consists of application icons and windows, which are held within the desktop.&lt;/p&gt;

	&lt;p&gt;&lt;img src="http://sonspring.com/images/220.gif" title="Layer 4: Windows; Layer 3: Desktop icons; Layer 2: Top bar, Desktop, Bottom bar; Layer 1: Wallpaper" alt="Layer 4: Windows; Layer 3: Desktop icons; Layer 2: Top bar, Desktop, Bottom bar; Layer 1: Wallpaper" /&gt;&lt;/p&gt;

	&lt;p&gt;This layering is achieved mostly by the order in which elements appear in the markup, with &lt;code&gt;z-index&lt;/code&gt; offering specific guidance when sibling elements need to overlap each other. Astute readers may view-source and notice the absence of the aforementioned wallpaper layer. This oddity will be explained shortly.&lt;/p&gt;

 &lt;hr /&gt;

	&lt;h3&gt;HTML5&lt;/h3&gt;

	&lt;p&gt;It should be noted that this demo would work just as well served in &lt;span class="caps"&gt;HTML&lt;/span&gt; 4.01 or &lt;span class="caps"&gt;XHTML&lt;/span&gt; 1.0, because I didn&amp;#8217;t make use of any new elements like &lt;code&gt;&amp;lt;header&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;footer&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;article&amp;gt;&lt;/code&gt; etc. In my opinion, these new tags are very specific to newspaper sites, and offer little use for building web applications.&lt;/p&gt;

	&lt;p&gt;That&amp;#8217;s okay though, because good ol&amp;#8217; &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; tags still work just fine, and in all browsers. Setting those nitpicks &lt;a href="http://www.w3schools.com/tags/html5_aside.asp"&gt;aside&lt;/a&gt; (har har), nowadays I prefer to use HTML5 on all my projects, because it allows for more terseness, and increased productivity, by getting rid of needless code requirements. For instance&amp;#8230;&lt;/p&gt;

&lt;pre&gt;&lt;strong&gt;XHTML 1.0&lt;/strong&gt;
&amp;lt;script type="text/javascript"&amp;gt;
/* &amp;lt;![CDATA[ */
// Code here.
/* ]]&amp;gt; */
&amp;lt;/script&amp;gt;&lt;br /&gt;

&lt;strong&gt;HTML 4.01&lt;/strong&gt;
&amp;lt;script type="text/javascript"&amp;gt;
// Code here.
&amp;lt;/script&amp;gt;&lt;br /&gt;

&lt;strong&gt;HTML5&lt;/strong&gt;
&amp;lt;script&amp;gt;
// Code here.
&amp;lt;/script&amp;gt;&lt;/pre&gt;

	&lt;p&gt;Think about it. When is the last time you wrote code inside a &amp;lt;script&amp;gt; tag to be interpreted in the browser, but it &lt;strong&gt;wasn&amp;#8217;t&lt;/strong&gt; JavaScript? Same goes for &lt;span class="caps"&gt;CSS&lt;/span&gt; includes as well. No more typing the obvious: &lt;code&gt;type=&amp;quot;text/css&amp;quot;&lt;/code&gt;.&lt;/p&gt;

 &lt;hr /&gt;

	&lt;h3&gt;JavaScript&lt;/h3&gt;

	&lt;p&gt;But, I digress. I think we can all agree that HTML5 is better than any of its predecessors, especially because it can be served as either &lt;span class="caps"&gt;HTML&lt;/span&gt; &lt;em&gt;or&lt;/em&gt; &lt;span class="caps"&gt;XHTML&lt;/span&gt;. So, let&amp;#8217;s get into the crux of this demo: &lt;em&gt;JavaScript&lt;/em&gt;. More specifically, the use of the awesome &lt;a href="http://jquery.com/"&gt;jQuery&lt;/a&gt; library and its trustworthy counterpart &lt;a href="http://jqueryui.com/"&gt;jQuery UI&lt;/a&gt;.&lt;/p&gt;

	&lt;p&gt;Though jQuery UI offers a variety of rich interface components, I opted to do my own visual look and feel, using only the &lt;a href="http://jqueryui.com/demos/draggable/"&gt;draggable&lt;/a&gt; and &lt;a href="http://jqueryui.com/demos/resizable/"&gt;resizable&lt;/a&gt; functionality. By using jQuery and jQuery UI, the amount of code I actually had to write myself was reduced considerably. Let&amp;#8217;s delve into what makes this demo tick.&lt;/p&gt;

	&lt;p&gt;First off, we define an empty object to be used as a pseudo &lt;a href="http://en.wikipedia.org/wiki/Namespace"&gt;namespace&lt;/a&gt; &amp;#8211; This technique is commonly referred to as the &lt;a href="http://yuiblog.com/blog/2007/06/12/module-pattern/"&gt;Module Pattern&lt;/a&gt; in JavaScript.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;var JQD = (function($) {
    return {
        // Code here.
    }
})(jQuery);
&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;By passing jQuery into the self-executing closure function, we can safely use the dollar sign ($) without worrying about potential collisions from other code that might make its way into the &amp;#8220;desktop&amp;#8221; environment. Plus, it keeps our code from conflicting with others&amp;#8217; since everything lives within the &lt;acronym title="jQuery Desktop"&gt;&lt;span class="caps"&gt;JQD&lt;/span&gt;&lt;/acronym&gt; object.&lt;/p&gt;

	&lt;p&gt;While there is certainly room for &lt;a href="http://snook.ca/archives/javascript/no-love-for-module-pattern"&gt;argument&lt;/a&gt; over whether this is the ultimate JavaScript programming pattern, it is one way to keep variable scope tidy. For more, I&amp;#8217;d highly recommend this book &amp;#8211; &lt;a href="http://www.amazon.com/dp/159059908X/"&gt;Pro JavaScript Design Patterns&lt;/a&gt;.&lt;/p&gt;

	&lt;p&gt;The first function, &lt;code&gt;JQD.init_clock&lt;/code&gt; begins by creating a new &lt;code&gt;Date&lt;/code&gt; object. From there, we can then derive all we need to know about the current month, day, year, and time. This function calls itself once every 60 seconds, to ensure that the clock stays current. We could be more precise by invoking it once per second, but that would have a greater impact on page performance.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;// Update every 60 seconds.
setTimeout(JQD.init_clock, 60000);
&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;The next two functions, &lt;code&gt;JQD.clear_active&lt;/code&gt; and  &lt;code&gt;JQD.window_flat&lt;/code&gt; are simply utilities that have been abstracted out to their own methods, for the sake of reuse. One clears elements&amp;#8217; active state and closes open menus. The other lowers the &lt;code&gt;z-index&lt;/code&gt; of all windows, so one can be given prominence.&lt;/p&gt;

	&lt;p&gt;That brings us to the &lt;code&gt;JQD.window_resize&lt;/code&gt; function, which is responsible for maximizing and restoring the dimensions / position of the windows. Look over the code below, then read on for a step by step explanation&amp;#8230;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;//
// Resize modal window.
//
window_resize: function(el) {
    // Nearest parent window.
    var win = $(el).closest(&amp;#39;div.window&amp;#39;);
&lt;/code&gt;
&lt;code&gt;    // Is it maximized already?
    if (win.hasClass(&amp;#39;window_full&amp;#39;)) {
        // Restore window position.
        win.removeClass(&amp;#39;window_full&amp;#39;).css({
            &amp;#39;top&amp;#39;: win.attr(&amp;#39;data-t&amp;#39;),
            &amp;#39;left&amp;#39;: win.attr(&amp;#39;data-l&amp;#39;),
            &amp;#39;right&amp;#39;: win.attr(&amp;#39;data-r&amp;#39;),
            &amp;#39;bottom&amp;#39;: win.attr(&amp;#39;data-b&amp;#39;),
            &amp;#39;width&amp;#39;: win.attr(&amp;#39;data-w&amp;#39;),
            &amp;#39;height&amp;#39;: win.attr(&amp;#39;data-h&amp;#39;)
        });
    }
    else {
        win.attr({
            // Save window position.
            &amp;#39;data-t&amp;#39;: win.css(&amp;#39;top&amp;#39;),
            &amp;#39;data-l&amp;#39;: win.css(&amp;#39;left&amp;#39;),
            &amp;#39;data-r&amp;#39;: win.css(&amp;#39;right&amp;#39;),
            &amp;#39;data-b&amp;#39;: win.css(&amp;#39;bottom&amp;#39;),
            &amp;#39;data-w&amp;#39;: win.css(&amp;#39;width&amp;#39;),
            &amp;#39;data-h&amp;#39;: win.css(&amp;#39;height&amp;#39;)
        }).addClass(&amp;#39;window_full&amp;#39;).css({
            // Maximize dimensions.
            &amp;#39;top&amp;#39;: &amp;#39;0&amp;#39;,
            &amp;#39;left&amp;#39;: &amp;#39;0&amp;#39;,
            &amp;#39;right&amp;#39;: &amp;#39;0&amp;#39;,
            &amp;#39;bottom&amp;#39;: &amp;#39;0&amp;#39;,
            &amp;#39;width&amp;#39;: &amp;#39;100%&amp;#39;,
            &amp;#39;height&amp;#39;: &amp;#39;100%&amp;#39;
        });
    }
&lt;/code&gt;
&lt;code&gt;    // Bring window to front.
    JQD.window_flat();
    win.addClass(&amp;#39;window_stack&amp;#39;);
},
&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;First, we assign a variable to the nearest parent window. jQuery&amp;#8217;s &lt;code&gt;closest()&lt;/code&gt; method keeps looking up the &lt;acronym title="Document Object Model"&gt;&lt;span class="caps"&gt;DOM&lt;/span&gt;&lt;/acronym&gt; tree until a parent window is found. We then check for the existence of the class name &lt;code&gt;window_full&lt;/code&gt; and if it exists, we get the window&amp;#8217;s former dimensions from its respective HTML5 &lt;code&gt;data-*&lt;/code&gt; attributes.&lt;/p&gt;

	&lt;p&gt;If the &lt;code&gt;window_full&lt;/code&gt; class was not present, then we know the window not maximized, so we store the current dimensions in &lt;code&gt;data-*&lt;/code&gt; attributes, and set its top, left, right, bottom values to zero &amp;#8211; and width, height to 100%. Lastly, we push down all windows, then bring the active window to the top.&lt;/p&gt;

	&lt;p&gt;The last main function, &lt;code&gt;JQD.init_desktop&lt;/code&gt; instantiates the clock, and does the heavy-lifting of wiring up all the JS event listeners. I will break each of these out into snippets, so that we can evaluate them in digestible chunks.&lt;/p&gt;

 &lt;hr /&gt;

	&lt;p&gt;The first involves listening to events on the &lt;code&gt;document&lt;/code&gt; itself. The &lt;code&gt;mousedown&lt;/code&gt; event is the first half of a &lt;code&gt;click&lt;/code&gt; event &amp;#8211; triggered when the mouse button is pushed, but has not yet been released &amp;#8211; which is when a &lt;code&gt;click&lt;/code&gt; is registered. When &lt;code&gt;mousedown&lt;/code&gt; occurs anywhere in the document, all active elements are cleared, and menus are hidden &amp;#8211; mimicking desktop functionality.&lt;/p&gt;

	&lt;p&gt;We also cancel right-click by binding a listener to the &lt;code&gt;contextmenu&lt;/code&gt; event. This would be the first step in creating a context menu when the desktop is clicked, but I didn&amp;#8217;t go this far because Opera does not allow for right-click cancellation. Instead, it &lt;em&gt;always&lt;/em&gt; shows the browser default right-click menu.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;// Cancel mousedown, right-click.
$(document).mousedown(function(ev) {
    if (!$(ev.target).closest(&amp;#39;a&amp;#39;).length) {
        JQD.clear_active();
        return false;
    }
}).bind(&amp;#39;contextmenu&amp;#39;, function() {
    return false;
});
&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;The next event listener is bound to all links, awaiting a user&amp;#8217;s click and then determining if the link is external or internal to the page. Because our desktop demo is a web page, and therefore essentially stateless, it is important not to break the metaphor by having links that cause the page to refresh.&lt;/p&gt;

	&lt;p&gt;That would obviously spoil the illusion. It is for this reason that apps like Gmail and Google Calendar pop external links into a new browser window/tab, and why we&amp;#8217;re doing the same via a dynamically added &lt;code&gt;target=&amp;quot;_blank&amp;quot;&lt;/code&gt;.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;// Relative or remote links?
$(&amp;#39;a&amp;#39;).click(function() {
    var url = $(this).attr(&amp;#39;href&amp;#39;);
    this.blur();
&lt;/code&gt;
&lt;code&gt;    if (url.match(/^#/)) {
        return false;
    }
    else if (url.match(&amp;#39;://&amp;#39;)) {
        $(this).attr(&amp;#39;target&amp;#39;, &amp;#39;_blank&amp;#39;);
        return true;
    }
});
&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;Next up, more link handling. In this scenario, we&amp;#8217;re looking for a &lt;code&gt;mousedown&lt;/code&gt; event triggered on the top menu bar, ala Mac OS X. This opens the corresponding menu, and if the user moves his/her mouse over another menu trigger, any other open menus are closed, and the new one is opened.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;// Make top menus active.
$(&amp;#39;a.menu_trigger&amp;#39;).mousedown(function() {
    JQD.clear_active();
    $(this).addClass(&amp;#39;active&amp;#39;).next(&amp;#39;ul.menu&amp;#39;).show();
}).mouseenter(function() {
    // Transfer focus, if already open.
    if ($(&amp;#39;ul.menu&amp;#39;).is(&amp;#39;:visible&amp;#39;)) {
        JQD.clear_active();
        $(this).addClass(&amp;#39;active&amp;#39;).next(&amp;#39;ul.menu&amp;#39;).show();
    }
});
&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;What desktop would be complete without icons, the hallmark of a true &lt;acronym title="Graphical User Interface"&gt;&lt;span class="caps"&gt;GUI&lt;/span&gt;&lt;/acronym&gt; application? The next scenario binds event listeners for &lt;code&gt;mousedown&lt;/code&gt; and double-clicks, on links with &lt;code&gt;class=&amp;quot;icon&amp;quot;&lt;/code&gt;. It also makes the icons moveable via the jQuery UI &lt;code&gt;draggable()&lt;/code&gt; function, restricted to the &lt;code&gt;#desktop&lt;/code&gt;.&lt;/p&gt;

	&lt;p&gt;Also take note a &lt;span class="caps"&gt;DOM&lt;/span&gt; scripting technique I like to refer to as &amp;#8220;link chaining.&amp;#8221; Basically, each icon is just a link pointing to its respective taskbar button, ala Windows OS. In turn, each of those is a link pointing to a corresponding modal window. When an icon is double-clicked, its taskbar button slides into place, and the button&amp;#8217;s link target window is shown and brought to the forefront.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;// Desktop icons.
$(&amp;#39;a.icon&amp;#39;).mousedown(function() {
    // Highlight the icon.
    JQD.clear_active();
    $(this).addClass(&amp;#39;active&amp;#39;);
}).dblclick(function() {
    // Get the link&amp;#39;s target.
    var x = $($(this).attr(&amp;#39;href&amp;#39;));
    var y = $(x.find(&amp;#39;a&amp;#39;).attr(&amp;#39;href&amp;#39;));
&lt;/code&gt;
&lt;code&gt;    // Show the taskbar button.
    if (x.is(&amp;#39;:hidden&amp;#39;)) {
        x.remove().appendTo(&amp;#39;#dock&amp;#39;).end().show(&amp;#39;fast&amp;#39;);
    }
&lt;/code&gt;
&lt;code&gt;    // Bring window to front.
    JQD.window_flat();
    y.addClass(&amp;#39;window_stack&amp;#39;).show();
}).draggable({
    revert: true,
    containment: &amp;#39;parent&amp;#39;
});
&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;Also like in Windows/Linux, each taskbar button causes its respective window to be shown or minimized, depending on the state of the window. In this case, we are using the &lt;code&gt;live()&lt;/code&gt; method because the taskbar buttons themselves are spliced and reintroduced into the &lt;span class="caps"&gt;DOM&lt;/span&gt; when their desktop icons are clicked, via &lt;code&gt;remove()&lt;/code&gt; and &lt;code&gt;appendTo()&lt;/code&gt;.&lt;/p&gt;

	&lt;p&gt;This ensures the most recently opened window has its taskbar button placed furthest to the right, but it breaks any bound event listeners. What the &lt;code&gt;live()&lt;/code&gt; method actually does is listen for clicks on the parent element, in this case the &lt;code&gt;#dock&lt;/code&gt; and then asks: &amp;#8220;Wait, was that actually a click on the dock&amp;#8217;s child link?&amp;#8221; If so, it takes the appropriate action on the link&amp;#8217;s target window.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;// Taskbar buttons.
$(&amp;#39;#dock a&amp;#39;).live(&amp;#39;click&amp;#39;, function() {
    // Get the link&amp;#39;s target.
    var x = $($(this).attr(&amp;#39;href&amp;#39;));
&lt;/code&gt;
&lt;code&gt;    // Hide, if visible.
    if (x.is(&amp;#39;:visible&amp;#39;)) {
        x.hide();
    }
    else {
        // Bring window to front.
        JQD.window_flat();
        x.show().addClass(&amp;#39;window_stack&amp;#39;);
    }
&lt;/code&gt;
&lt;code&gt;    // Stop the live() click.
    this.blur();
    return false;
});
&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;The following example reveals a window on &lt;code&gt;mousedown&lt;/code&gt;, if it happens to be obscured by other open windows. Each window is draggable via its title bar, and resizable via its bottom-right corner. Also, a minimum width and height are defined, and windows are confined to their parent element &amp;#8211; &lt;code&gt;#desktop&lt;/code&gt;.&lt;/p&gt;

	&lt;p&gt;We then traverse a bit further, via the &lt;code&gt;find()&lt;/code&gt; method, attaching a double-click event handler to the window&amp;#8217;s title bar, which will maximize / resize the window. Then, we go another level deep via &lt;code&gt;find()&lt;/code&gt; again, this time to the 16&amp;#215;16 icon in the title bar, wiring up a double-click handler to close the window if triggered.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;// Make windows movable.
$(&amp;#39;div.window&amp;#39;).mousedown(function() {
    // Bring window to front.
    JQD.window_flat();
    $(this).addClass(&amp;#39;window_stack&amp;#39;);
}).draggable({
    // Confine to desktop.
    // Movable via top bar only.
    containment: &amp;#39;parent&amp;#39;,
    handle: &amp;#39;div.window_top&amp;#39;
}).resizable({
    containment: &amp;#39;parent&amp;#39;,
    minWidth: 400,
    minHeight: 200
&lt;/code&gt;
&lt;code&gt;// Double-click top bar to resize, ala Windows OS.
}).find(&amp;#39;div.window_top&amp;#39;).dblclick(function() {
    JQD.window_resize(this);
&lt;/code&gt;
&lt;code&gt;// Double click top bar icon to close, ala Windows OS.
}).find(&amp;#39;img&amp;#39;).dblclick(function() {
    // Traverse to the close button, and hide its taskbar button.
    $($(this).closest(&amp;#39;div.window_top&amp;#39;).find(&amp;#39;a.window_close&amp;#39;).attr(&amp;#39;href&amp;#39;)).hide(&amp;#39;fast&amp;#39;);
&lt;/code&gt;
&lt;code&gt;    // Close the window itself.
    $(this).closest(&amp;#39;div.window&amp;#39;).hide();
&lt;/code&gt;
&lt;code&gt;    // Stop propagation to window&amp;#39;s top bar.
    return false;
});
&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;In order for windows to be minimized, resized, or closed, we assign event handlers to the respective buttons. Also, one for &lt;code&gt;mousedown&lt;/code&gt; that affects all three buttons. Regardless of what action is taken, we want to clear all active elements, and then &lt;code&gt;return false&lt;/code&gt; to keep the &lt;code&gt;mousedown&lt;/code&gt; from propagating to the parent title bar. Else, the window would be draggable by its action buttons, a weird behavior indeed.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;// Get action buttons for each window.
$(&amp;#39;a.window_min, a.window_resize, a.window_close&amp;#39;).mousedown(function() {
    JQD.clear_active();
    // Stop propagation to window&amp;#39;s top bar.
    return false;
});
&lt;/code&gt;
&lt;code&gt;// Minimize the window.
$(&amp;#39;a.window_min&amp;#39;).click(function() {
    $(this).closest(&amp;#39;div.window&amp;#39;).hide();
});
&lt;/code&gt;
&lt;code&gt;// Maximize or restore the window.
$(&amp;#39;a.window_resize&amp;#39;).click(function() {
    JQD.window_resize(this);
});
&lt;/code&gt;
&lt;code&gt;// Close the window.
$(&amp;#39;a.window_close&amp;#39;).click(function() {
    $(this).closest(&amp;#39;div.window&amp;#39;).hide();
    $($(this).attr(&amp;#39;href&amp;#39;)).hide(&amp;#39;fast&amp;#39;);
});
&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;For those familiar with Windows/Linux, &amp;#8220;show desktop&amp;#8221; is a recognizable button, used to minimize all windows simultaneously, allowing for an unobstructed view of the desktop. The same is true with our demo. If one or more windows are visible, we assume the user wants to see the desktop, and &lt;em&gt;all&lt;/em&gt; windows are minimized. Otherwise, if all windows are minimized, then all are restored.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;// Show desktop button, ala Windows OS.
$(&amp;#39;#show_desktop&amp;#39;).click(function() {
    // If any windows are visible, hide all.
    if ($(&amp;#39;div.window:visible&amp;#39;).length) {
        $(&amp;#39;div.window&amp;#39;).hide();
    }
    else {
        // Otherwise, reveal hidden windows that are open.
        $(&amp;#39;#dock li:visible a&amp;#39;).each(function() {
            $($(this).attr(&amp;#39;href&amp;#39;)).show();
        });
    }
});
&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;When the page loads, the table within each window is given alternating zebra stripes, ala Mac OS X. Also, when a window is open and the user clicks on a row of data about a particular file, we highlight the entire row. This behavior is fairly typical across all operating systems, so it was worth implementing.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$(&amp;#39;table.data&amp;#39;).each(function() {
    // Add zebra striping, ala Mac OS X.
    $(this).find(&amp;#39;tr:even td&amp;#39;).addClass(&amp;#39;zebra&amp;#39;);
}).find(&amp;#39;tr&amp;#39;).live(&amp;#39;click&amp;#39;, function() {
    // Highlight row, ala Mac OS X.
    $(this).closest(&amp;#39;tr&amp;#39;).addClass(&amp;#39;active&amp;#39;);
});
&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;Lastly, we load the desktop wallpaper. The reason for this is simple: To avoid blocking the loading of other assets, such as images or JavaScript. You see, since the &lt;code&gt;#wallpaper&lt;/code&gt; is the bottommost of all our layered planes, it needs to come first in the markup, immediately after the opening &lt;code&gt;&amp;lt;body&amp;gt;&lt;/code&gt; tag.&lt;/p&gt;

	&lt;p&gt;In order to do this, we simply use jQuery&amp;#8217;s &lt;code&gt;prepend()&lt;/code&gt; method, and pass in the markup for our wallpaper image. This allows us to splice it in as the first child element of the &lt;code&gt;document.body&lt;/code&gt;, placing it absolutely lowest in the stack.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;// Add wallpaper last, to prevent blocking.
$(&amp;#39;body&amp;#39;).prepend(&amp;#39;&amp;lt;img id=&amp;quot;wallpaper&amp;quot; class=&amp;quot;abs&amp;quot; src=&amp;quot;assets/images/misc/wallpaper.jpg&amp;quot; /&amp;gt;&amp;#39;);
&lt;/code&gt;&lt;/pre&gt;

	&lt;h3&gt;Dun&lt;/h3&gt;

	&lt;p&gt;Well folks, that brings us to the end of this tutorial. Hopefully it wasn&amp;#8217;t too long-winded. If anything, I hope you take away from this demo how powerful jQuery and jQuery UI can be, allowing you to build rich &amp;#8220;desktop&amp;#8221; interactivity without writing a whole lot of code. Feel free to download the code from my &lt;a href="http://bitbucket.org/nathansmith/jquery-desktop/"&gt;BitBucket&lt;/a&gt; repository. It is open source, dual licensed under &lt;a href="http://www.gnu.org/copyleft/gpl.html"&gt;&lt;span class="caps"&gt;GPL&lt;/span&gt;&lt;/a&gt; and &lt;a href="http://www.opensource.org/licenses/mit-license.php"&gt;&lt;span class="caps"&gt;MIT&lt;/span&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sonspring?a=j-ra2ivpgrw:zsdm8zJ2TpU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sonspring?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sonspring?a=j-ra2ivpgrw:zsdm8zJ2TpU:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sonspring?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>
</entry>
<entry>
		<author>
			<name>Nathan Smith</name>
		</author>
		<published>2009-08-02T07:45:00Z</published>
		<updated>2009-08-02T22:01:07Z</updated>
		<title type="html">My Leadership Style</title>
		<link rel="alternate" type="text/html" href="http://sonspring.com/journal/my-leadership-style" />
		<id>tag:sonspring.com,2009-08-02:7dfb1939175daba4ae7c906f4e24be92/f6b490aab04bd118e479ee2e9029e52e</id>
		<category term="Christianity" />
		
		<content type="html">
&lt;p&gt;The following is a brief essay I wrote for a seminary class, based on personal life experience. The assignment was to discuss one&amp;#8217;s own leadership style.&lt;/p&gt;

 &lt;hr /&gt;

	&lt;p&gt;I believe that my personal leadership style has a lot to do with my personality type: Extraverted iNtuitive Thinking Judging. As an &lt;span class="caps"&gt;ENTJ&lt;/span&gt;, I initially struggled with my sense of calling. To clarify, I felt compelled to apply for and attend seminary, in fact only pursuing acceptance to &lt;a href="http://www.asburyseminary.edu/"&gt;Asbury&lt;/a&gt; based on the notion that if it was God&amp;#8217;s will then I should not need to send paperwork to more than one school. However, the plan for what I was to do next, the greater end-goal towards which I should be heading, was not clear to me. To be honest, I felt like a bit of a freak for being one of the only guys in my dorm that did not have his heart set on being a pastor and/or climbing the ranks of any particular denominational ladder. Not to diminish such aspirations, as they are certainly necessary, holy, and noble. However, I felt that perhaps my path would lead me on a different journey. It was not until taking a personality profile test for a seminary class, that said of &lt;span class="caps"&gt;ENTJ&lt;/span&gt;s: &amp;#8220;You are drawn to non-parish ministry&amp;#8221; that I realized people such as myself – those with formal ministry training yet seemingly no aspiration to use said &lt;a href="http://en.wikipedia.org/wiki/Master_of_Divinity"&gt;MDiv&lt;/a&gt; in a liturgical setting – not only exist, we actually have a category.&lt;/p&gt;

	&lt;p&gt;According to the site &lt;a href="http://www.typelogic.com/entj.html"&gt;TypeLogic&lt;/a&gt;, &amp;#8220;&lt;span class="caps"&gt;ENTJ&lt;/span&gt;s have a natural tendency to marshall and direct.&amp;#8221; This personality type has been referred to as &lt;a href="http://www.personalitypage.com/ENTJ.html"&gt;the executive&lt;/a&gt;. The list of notable &lt;span class="caps"&gt;ENTJ&lt;/span&gt; leaders include such people as: Al Gore, Franklin Roosevelt, Norman Schwarzkopf, and Steve Jobs. Those who fit into this personality type are said to categorically enjoy interacting with others – deriving energy and sense of self-worth by how well they get along with people. The mixture of a confidently outgoing personality, coupled with an inherent ability to act on a hunch, makes them ideal organizational pioneers.&lt;/p&gt;

	&lt;p&gt;While I have noticed some of these tendencies in myself, I cannot say it was always this way. In fact, I was quite a shy kid growing up. Moving so frequently for my father&amp;#8217;s rising military career caused me to be somewhat closed off, initially tentative and reserved as I continually readjusted to new environments. In total, I attended two elementary schools, one middle school, five high schools, two colleges, and one seminary. Gradually, each relocation forced me to adapt and (to some extent) re-invent myself. I eventually realized that if I was to make friends and learn to acclimate to my surroundings, it was going to require intentional effort on my part. There is a stark difference between being a military kid living on an Air Force base, and living amongst the general civilian population.&lt;/p&gt;

	&lt;p&gt;&lt;em&gt;On-base&lt;/em&gt; – as it is called, each family knows the hardship of being uprooted by the government and plopped-down at the behest of Uncle Sam. As such, when you first move in to your new house on-base, fellow military families will often bring casseroles and other meals as a way of welcoming you to the neighborhood. Off-base, this is not the norm. It is not that civilian families have anything against military families, per say. They are simply not used to the continual churn that service-men / women endure. They are (understandably) wrapped up living their own lives, with their own friends.&lt;/p&gt;

	&lt;p&gt;Depending on the availability and quality level of housing within reasonable driving distance of our stationed Air Force base, we would sometimes live on-base, yet in others locations choose to live off-base. It was this flip-flop between the two cultures, particularly during high school in which the pace was one year (or less) per city, that I learned the importance of resilience. We had a wooden wreath, which still hangs proudly in my parents&amp;#8217; kitchen, bearing: &amp;#8220;Home is where the Air Force sends us.&amp;#8221; My mom was fond of telling her children: &amp;#8220;You need to bloom where you are planted.&amp;#8221; In that way, we became quite a tenacious group of siblings, friendly enough – but always willing to fight to carve out a niche for ourselves. It is this scrappy attitude with which I have approached things my entire life.&lt;/p&gt;

	&lt;p&gt;For better or worse, I am an optimist. I want to believe the best in people, which sometimes sets me up for greater disappointment. In that regard, I suppose I am akin to a realist who likes to give others the benefit of the doubt. Occasionally, I will just know (via a gut feeling) that something is awry but I will reason with myself that I ought not to jump to conclusions. I believe this to be the &amp;#8220;E&amp;#8221; and &amp;#8220;T&amp;#8221; aspects kicking in – a desire to be social and think things through rationally. Yet time and again my first inclination will prove to be correct.&lt;/p&gt;

	&lt;p&gt;For instance, I was once considering a job where the interviewer wore sunglasses the entire time (we were outdoors). For some reason, this did not feel right to me, and I had reservations about whether or not I should take the offer, that perhaps this individual was not being entirely transparent. That is not to say this person seemed altogether untrustworthy, but I did find the lack of opportunity to make direct eye contact a bit disconcerting. I took the job despite feeling slightly hesitant, but I later regretted this decision. In the new environment I felt micro-managed by superiors who did not understand their impact on our (lack of) code development process. When I think back on my time there, I am reminded of George Whitefield&amp;#8217;s famous quote:&lt;/p&gt;

	&lt;blockquote&gt;
		&lt;p&gt;&amp;#8220;My brother [John] Wesley acted wisely. The souls that were awakened under his ministry he joined in class, and thus preserved the fruits of his labor. This I neglected, and my people are a rope of sand.&amp;#8221;&lt;/p&gt;
	&lt;/blockquote&gt;

	&lt;p&gt;Without a formalized process, we floundered in our efforts to build a consistent product, and were easily distracted by whatever happened to be the passing fad. That is why I think it is of utmost importance that a company choose an approach and stick to it, whatever the particular methodology may be. Personally, over the past nine months I have found the agile &lt;a href="http://en.wikipedia.org/wiki/Scrum_%28development%29"&gt;Scrum&lt;/a&gt; process to work best, and try to evangelize it whenever project management comes up as a topic of conversation.&lt;/p&gt;

	&lt;p&gt;To hear me tell it, you might think that I never had any good bosses. Quite the contrary. I have had the privilege  of working for several well-qualified mentor / colleagues. Two in particular had a big impact on me: &lt;a href="http://www.linkedin.com/pub/mark-kraemer/1/930/b1a"&gt;Mark Kraemer&lt;/a&gt; and &lt;a href="http://www.linkedin.com/in/stephenpa"&gt;Stephen Anderson&lt;/a&gt;. Both had very similar approaches to their work habits and management styles – coworkers themselves, before I met them in their respective roles at different companies. Mark would always tell his team to &amp;#8220;embrace constraints&amp;#8221; and work within an established set of design patterns and software best practices – not necessarily coloring outside the lines, so to speak – but filling every inch of the available &amp;#8220;canvas&amp;#8221; with as much beauty and innovation as possible. Stephen took things a step further, by critiquing the limitations of the available palette. While Mark would drive us to do the best we could, Stephen would often challenge the notion of things being &amp;#8220;good enough,&amp;#8221; questioning if we could remove constraints or redefine the parameters.&lt;/p&gt;

	&lt;p&gt;I gleaned quite a bit working for these two, learning from their example of co-laboring alongside their subordinates. It is this collective approach to leadership that I attempt to employ with my colleagues, temporarily stepping up if I perceive a leadership vacuum, but for the most part taking a more collaborative stance – respecting each individual&amp;#8217;s unique perspective and expertise. In dealing with coworkers or making recommendations to people who attend my talks at various conferences, I try to encourage people to stretch themselves beyond what they currently consider their areas of core competency. To use an analogy: In the industry (if there is such a thing) of web development – designers who can code will always have an advantage over those who only do one or the other. Often we hear about the tension between &amp;#8220;Form vs. Function&amp;#8221; but I caution against buying into that mentality because one who holds this to be true is usually compensating for lack of skill or interest in the other end of the spectrum. Therefore, when talking with both left / right-brained people, I emphasize the importance of not being complacent. I say: So what if you are amazing at one particular skill? Someone who is a master of two is even more impressive, especially if without pretense.&lt;/p&gt;

	&lt;p&gt;Yet, not everyone shares my vantage point. There are some who would prefer to be seen as a specialist, and strive for nothing outside of a narrowly defined set of parameters. Perhaps it is my upbringing that influences my perception of job skill-sets, but to use a military analogy: It seems to me that a soldier who is versatile and motivated enough to study beyond only what is taught in boot-camp is not only better poised to get the next big promotion, but also more likely to live through an ambush on the battlefield. This same principle applies to leadership. One can attempt to do everything by the book, but the downfall of a leader usually comes in the form of unexpected circumstances. While there is no way to adequately prepare for the unknown, generalists stand a better chance of survival.&lt;/p&gt;

	&lt;p&gt;This is why, though only myself and two others bear the title UX (User eXperience) Developer at Fellowship Technologies, I really see the entire development team as having a direct impact on UX. Everything from visual design, to the file-size of images and code, to the speed at which a database query executes, to the up-time of our underlying infrastructure – it all affects the perception that someone has of our product. To compete in the realm of &lt;span class="caps"&gt;SAAS&lt;/span&gt; – software as a service – our web applications must rival the performance of desktop applications. An example of such a success would be Gmail, which has cut into the email market share of Microsoft Outlook, as well as Google Docs which is a viable alternative to MS Word / Excel. To counter this encroachment, Microsoft is currently building an online version of Office that will be free of charge, due out sometime next year. Additionally, Google recently &lt;a href="http://googleblog.blogspot.com/2009/07/introducing-google-chrome-os.html"&gt;announced&lt;/a&gt; that it is developing its own operating system. Despite their core business being search, these tangential products keep would-be contenders on their heels.&lt;/p&gt;

	&lt;p&gt;It is this type of thinking that produces what is referred to as &amp;#8220;disruptive technology&amp;#8221; – a product that seemingly comes out of nowhere and challenges the dominance of the status quo. Leaders must not only hone the necessary foresight to anticipate such moves by competitors, but need to themselves be fostering an environment in which out-of-the-box thinking is encouraged. If ever I find myself in a managerial or leadership position, though I dread that inevitable possibility because it would remove me from the creative process, I will attempt to hire people who realize the value of constant learning. I have met some people who have formal degrees in their respective fields, and lord that over others who do not. In my opinion, this creates a blind spot – assuming that the degree one obtained however many years ago is still the single litmus indicator of competency today. I tend to get along better with people who are good at what they do, regardless of how they obtained their skills. That is the style of leader I aspire to be – valuating individuals beyond what is on their résumé.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sonspring?a=g6QC1bmtJTk:Gwyo0ywoBH4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sonspring?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sonspring?a=g6QC1bmtJTk:Gwyo0ywoBH4:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sonspring?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>
</entry>
<entry>
		<author>
			<name>Nathan Smith</name>
		</author>
		<published>2009-07-29T07:12:20Z</published>
		<updated>2009-07-29T07:12:20Z</updated>
		<title type="html">Symphonic Leadership</title>
		<link rel="alternate" type="text/html" href="http://sonspring.com/journal/symphonic-leadership" />
		<id>tag:sonspring.com,2009-07-04:7dfb1939175daba4ae7c906f4e24be92/3553d9aae6a0d3e317779162ac81d068</id>
		<category term="Christianity" />
		
		<content type="html">
&lt;p&gt;For an assignment in my last seminary class before I graduate, we had to discuss with other students what key functions are provided by effective leaders. One of my classmates cited a radio &lt;a href="http://www.npr.org/templates/story/story.php?storyId=106203988"&gt;interview&lt;/a&gt; with &lt;a href="http://www.maestromaazel.com/"&gt;Maestro Lorin Maazel&lt;/a&gt;, retired conductor of the N.Y. Philharmonic. Now 79 years old, he reflected upon his prestigious career and what it means to be an effective leader of musicians.&lt;/p&gt;

	&lt;p&gt;&lt;img src="http://sonspring.com/images/218.jpg" title="Lorin Maazel" alt="Lorin Maazel" /&gt;&lt;/p&gt;

 &lt;hr /&gt;

	&lt;p&gt;I think that a symphony conductor is a great analogy for effective leadership. In keeping with that metaphor, I believe the functions of a leader to be:&lt;/p&gt;

	&lt;h3&gt;[1]. Rebuking / Correcting&lt;/h3&gt;

	&lt;p&gt;A conductor needs to have the gumption to tell others when they&amp;#8217;re out of tune. An effective leader can&amp;#8217;t be so concerned with being amicable that s/he can&amp;#8217;t put people in their place when they step out of line. While it might not make one popular, it does ensure that the group maintains a certain level of quality.&lt;/p&gt;

	&lt;h3&gt;[2]. Exhorting / Encouraging&lt;/h3&gt;

	&lt;p&gt;Likewise, a good conductor doesn&amp;#8217;t let good deeds go unnoticed. If someone has shown remarkable improvement in an orchestra, putting in those extra hours of practice or taking the time to fine-tune one&amp;#8217;s instrument, that will be self-evident amongst the group. A good conductor will say a few words of encouragement to publicly recognize the hard work of various individuals. So too an effective leader should praise his/her constituents, so all will strive for excellence.&lt;/p&gt;

	&lt;h3&gt;[3]. Instruction / Guidance&lt;/h3&gt;

	&lt;p&gt;A good conductor doesn&amp;#8217;t expect the musicians in his/her charge to become amazing overnight. S/he realizes that to hone the necessary talent takes a lifetime of dedication. Therefore, a good conductor / leader is willing to put in the time to teach others how to best use their natural gifts. Some people can master a variety of instruments, others might play only one or two, but do so exceptionally. Both generalists and specialists are needed.&lt;/p&gt;

	&lt;h3&gt;[4]. Scouting / Recruiting&lt;/h3&gt;

	&lt;p&gt;A good conductor realizes that there is inevitable turn-over in any orchestra. Musicians leave to join other ensembles, or occasionally strike off on their own to pursue a solo career. Long-standing members might pass away, and their vacancies need to be filled, lest the symphonic harmony become unbalanced. A good conductor is always on the lookout for new up-and-coming talent, that can be cultivated into the professional musicians of tomorrow. Likewise, a good leader is always thinking about empowering the next generation of spiritual trailblazers. There is no success without a successor.&lt;/p&gt;

	&lt;h3&gt;[X]. First-Chair&lt;/h3&gt;

	&lt;p&gt;Not sure where this fits in my bulleted list, so I&amp;#8217;m just calling it out separately. In orchestras, there is the concept of &amp;#8220;first-chair.&amp;#8221; This is the #1 person in a respective category or instrument. Orchestras sit in a half-circle when performing, which means that only one person per row can be seen directly by the audience. This honor is reserved for the first-chair. This person usually performs solos when called for in a particular song, and acts as a mentor.&lt;/p&gt;

	&lt;p&gt;Because this position of esteem is highly sought-after, orchestras often have in place a &amp;#8220;challenge&amp;#8221; system, by which someone in a lower rank can call-out the first-chair to a duel of sorts. After a play-off of a selection of music, and perhaps group consensus, the challenger can potentially claim first-chair. There is usually a time period that someone must wait after challenging unsuccessfully, and a duration of immunity if one has recently become first-chair. This allows for tempers to cool, and for motivation to build to work harder.&lt;/p&gt;

	&lt;p&gt;While an effective leader runs things according to a process, it is also important to afford opportunities for advancement based on merit, not necessarily seniority. If there is a situation in which there is a long time employee up for a promotion, but that person is less capable than someone who exhibits an obvious knack for performing that particular set of job duties, a leader must choose wisely. Ultimately, the decision has to be in the best interest of the group, not just to do right by a single individual.&lt;/p&gt;

 &lt;hr /&gt;

	&lt;p&gt;As an aside: That&amp;#8217;s why non-denominational churches have dynamic leaders who seemingly come out of nowhere, whereas large mainline denominations do business-as-usual, and miss out on their prodigies. I am in no way saying that of myself, but would point to &lt;a href="http://www.stevenfurtick.com/"&gt;Steven Furtick&lt;/a&gt; as an example. He is in his 20&amp;#8217;s but leads a large congregation, as the senior pastor of &lt;a href="http://www.elevationchurch.org/"&gt;Elevation Church&lt;/a&gt;.&lt;/p&gt;

	&lt;p&gt;Anyway, that summarizes my thoughts. I would love to hear any other analogies and metaphors that you think help to encapsulate what good leadership entails.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sonspring?a=jykDraZolIY:YRTDXzYK9Fo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sonspring?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sonspring?a=jykDraZolIY:YRTDXzYK9Fo:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sonspring?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>
</entry>
<entry>
		<author>
			<name>Nathan Smith</name>
		</author>
		<published>2009-06-17T07:41:53Z</published>
		<updated>2009-06-17T07:58:24Z</updated>
		<title type="html">Design 4 Drupal</title>
		<link rel="alternate" type="text/html" href="http://sonspring.com/journal/design-4-drupal" />
		<id>tag:sonspring.com,2009-06-17:7dfb1939175daba4ae7c906f4e24be92/e356c7b7a126e88ee5f6f1648f7b61c3</id>
		<category term="Web-Dev" />
		
		<content type="html">
&lt;p&gt;&lt;small&gt;My 5-month old, at D4D&lt;/small&gt;&lt;br /&gt;
&lt;img src="http://sonspring.com/images/217.jpg" title="Hudson @ D4D" alt="Hudson @ D4D" /&gt;&lt;/p&gt;

	&lt;h3&gt;Grid Talk&lt;/h3&gt;

	&lt;p&gt;This past weekend, I had the privilege of speaking in Boston at &lt;a href="http://boston.design4drupal.org/"&gt;Design 4 Drupal&lt;/a&gt;, an un-conference meet-up graciously hosted by &lt;a href="http://mit.edu/"&gt;&lt;span class="caps"&gt;MIT&lt;/span&gt;&lt;/a&gt;. I co-presented &lt;a href="http://boston.design4drupal.org/session/accelerated-grid-theming-ninesixty"&gt;Accelerated Grid Theming&lt;/a&gt; alongside &lt;a href="http://fourkitchens.com/bios/todd-ross-nienkerk"&gt;Todd Nienkerk&lt;/a&gt;, on how to use the &lt;a href="http://drupal.org/project/ninesixty"&gt;NineSixty&lt;/a&gt; theme, a port of &lt;a href="http://960.gs/"&gt;960.gs&lt;/a&gt; for use in Drupal. I dare say it was quite well received.&lt;/p&gt;

	&lt;p&gt;I mostly covered the generalities of grid design, and what inspired me to make a prototyping / design / &lt;span class="caps"&gt;CSS&lt;/span&gt; framework in the first place. Todd took it from there, and described all the nuances that go into the actual theme, built expertly by &lt;a href="http://twitter.com/dvessel"&gt;Joon Park&lt;/a&gt;, who those in the Drupal community know as &lt;a href="http://drupal.org/user/56782"&gt;dvessel&lt;/a&gt;. In all likelihood, I will incorporate back into the framework the extensions he made.&lt;/p&gt;

	&lt;p&gt;I was surprised / humbled / honored that the event organizers moved our presentation from one of the classrooms to the largest lecture hall at the &lt;a href="http://en.wikipedia.org/wiki/Stata_Center"&gt;&lt;span class="caps"&gt;MIT&lt;/span&gt; Stata Center&lt;/a&gt;. They also bumped all other sessions to different time slots, essentially giving us the monopoly on attendees. As far as I know, the majority of those present attended our talk. One might argue the &lt;em&gt;cause and effect&lt;/em&gt; of that scenario, but I &lt;em&gt;think&lt;/em&gt; it was due to the level of interest in our material&amp;#8230;&lt;/p&gt;

	&lt;blockquote&gt;
		&lt;p&gt;More than one attendee said they thought the sessions here were better than at DrupalCon. With keynotes by Jeff Robbins and Jay Batson and huge sessions like the one on the 960 grid by Nathan Smith, the creator of 960, and Todd Nienkerk it&amp;#8217;s hard not to feel this way.&lt;br /&gt;
&amp;#8212; &lt;a href="http://www.mattfarina.com/2009/06/16/drupalcamp-boston-wrap"&gt;Matt Farina&lt;/a&gt;&lt;/p&gt;
	&lt;/blockquote&gt;

	&lt;blockquote&gt;
		&lt;p&gt;I really had a great time, and the session from &lt;a href="http://twitter.com/nathansmith/"&gt;@nathansmith&lt;/a&gt; and &lt;a href="http://twitter.com/toddross/"&gt;@toddross&lt;/a&gt; for 960.gs was great, and I think that was obvious by the fact it got moved to the larger lecture hall! It seems like 960.gs is truly set to take over the grid system, and become very well adopted by the Drupal community.&lt;br /&gt;
&amp;#8212; &lt;a href="http://himerus.com/blog/himerus/design-4-drupal-boston-great-event"&gt;Jake Strawn&lt;/a&gt;&lt;/p&gt;
	&lt;/blockquote&gt;

	&lt;blockquote&gt;
		&lt;p&gt;For me, the highlight was hearing the creator of the 960 Grid System, Nathan Smith speak with Todd Nienkerk&amp;#8230; There was such a large interest in the presentation that the organizers had to move it to a larger room. I feel as though it is a tribute to the Drupal community to have such a person as Nathan getting excited about Drupal and sharing his thoughts on how to integrate his incredible grid system into Drupal. His authentic interest in understanding what it means to be Drupal, as a developer or designer, is inspiring to say the least.&lt;br /&gt;
&amp;#8212; &lt;a href="http://jasonrsavino.com/content/drupal-design-camp-boston-comes-to-a-close"&gt;Jason Savino&lt;/a&gt;&lt;/p&gt;
	&lt;/blockquote&gt;

	&lt;h3&gt;Community&lt;/h3&gt;

	&lt;p&gt;Overall, I learned a lot at the conference &amp;#8211; how to wrangle Drupal to output just about any markup imaginable, several theme tips and tricks, and I also saw a demo of a cool new module called &lt;a href="http://drupal.org/project/skinr"&gt;Skinr&lt;/a&gt;. The one thing that surprised me the most was though people are obviously passionate about their respective roles: designer / developer &amp;#8211; ego was not really a big factor. The spirit of amicability and mutual knowledge sharing abounded. &lt;a href="http://twitter.com/stevenmerrill/status/2169355581"&gt;Steve Merrill&lt;/a&gt; said it best&amp;#8230;&lt;/p&gt;

	&lt;blockquote&gt;
		&lt;p&gt;On the Bolt Bus back from the Drupal Design Camp in Boston.&lt;br /&gt;
Drupal&amp;#8217;s great software, but the community is the real secret sauce.&lt;/p&gt;
	&lt;/blockquote&gt;

	&lt;h3&gt;Acquia &amp;#8211; Jay Batson&lt;/h3&gt;

	&lt;p&gt;I saw this not only from the attendees, but also from several of the big-name presenters. For instance, I was able to have a great conversation with Acquia co-founder &lt;a href="http://acquia.com/about-us/team"&gt;Jay Batson&lt;/a&gt; who went out of his way to sit down and pick my brain about my thoughts on Drupal from an outsider perspective. That is, someone who is new to the system but has dealt with designing for other &lt;span class="caps"&gt;CMS&lt;/span&gt; platforms. He asked me to let him know of any pain-points, and to feel free to make suggestions on how to improve things for designers in the future.&lt;/p&gt;

	&lt;h3&gt;Geeks &amp;amp; God&lt;/h3&gt;

	&lt;p&gt;I would be remiss if I did not also mention the guys from &lt;a href="http://geeksandgod.com/"&gt;Geeks &amp;amp; God&lt;/a&gt;. After all, if not for G&amp;amp;G co-host Matt Farina inviting / prodding me to speak at &lt;span class="caps"&gt;MIT&lt;/span&gt;, I probably wouldn&amp;#8217;t have experienced this awesome gathering of designers. He and Rob Feature were kind enough to do a 30 minute segment with me, where we talked about Drupal, grid design, and the advancements we&amp;#8217;re making at &lt;a href="http://fellowshiptech.com/"&gt;Fellowship Tech&lt;/a&gt; stemming from our &lt;a href="http://developer.fellowshipone.com/"&gt;developer site&lt;/a&gt; and &lt;span class="caps"&gt;REST&lt;/span&gt;ful &lt;acronym title="Application Programming Interface"&gt;&lt;span class="caps"&gt;API&lt;/span&gt;&lt;/acronym&gt;.&lt;/p&gt;

	&lt;h3&gt;Takeaways&lt;/h3&gt;

	&lt;p&gt;A lot of discussion was had around how to make Drupal increasingly designer friendly, especially with the upcoming release of version 7 and its focus on &lt;a href="http://d7ux.org/"&gt;UX&lt;/a&gt;. Jay Batson challenged the attendees to split up into groups and envision what could be done to help the greater Drupal community embrace good design. He even went so far as to volunteer time, money, and bandwidth via &lt;a href="http://design.acquia.com/"&gt;design.acquia.com&lt;/a&gt; &amp;#8211; which appears to already be up and running.&lt;/p&gt;

	&lt;p&gt;Discussions from the weekend have continued to be &lt;a href="http://drupal.org/node/493154"&gt;fleshed out&lt;/a&gt;, around a possible design centered aspect to the main Drupal site itself. Regardless of how that pans out, the cool thing is that design is being given due consideration.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sonspring?a=lzRV4urw3GI:1Mnlhgmou_4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sonspring?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sonspring?a=lzRV4urw3GI:1Mnlhgmou_4:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sonspring?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>
</entry></feed>
