<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0" xml:base="http://sonspring.com">
<channel>
 <title>SonSpring</title>
 <link>http://sonspring.com</link>
 <description />
 <language>en</language>
<feedburner:info uri="sonspring" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><geo:lat>43.627734</geo:lat><geo:long>-116.207567</geo:long><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://sonspring.com/rss/" /><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><item>
 <title>Tactical Scrum</title>
 <link>http://sonspring.com/journal/tactical-scrum</link>
 <description>&lt;p class="notice"&gt;&lt;strong&gt;Note:&lt;/strong&gt; If the following workflow appeals to you, we&amp;#8217;re &lt;a href="http://developer.fellowshipone.com/hiring/"&gt;hiring&lt;/a&gt; developers.&lt;/p&gt;

	&lt;p&gt;&lt;img src="/sites/default/files/band_of_scrum.jpg" title="Band of Scrum Developers" alt="Band of Scrum Developers" width="500" height="300" /&gt;&lt;/p&gt;

	&lt;p&gt;I have been working at &lt;a href="http://fellowshiptech.com/"&gt;Fellowship Tech&lt;/a&gt; for a little over a year now. One of the most striking things I noticed after coming on board, and something I&amp;#8217;m still consistently impressed with, is how well the company as a whole really &amp;#8220;gets it&amp;#8221; when it comes to software development as a continuous process.&lt;/p&gt;

	&lt;p&gt;We adhere to a project management methodology named &lt;a href="http://en.wikipedia.org/wiki/Scrum_%28development%29"&gt;Scrum&lt;/a&gt;, after the &lt;a href="http://en.wikipedia.org/wiki/Scrum_%28rugby%29"&gt;scrummage&lt;/a&gt; that occurs during rugby games, when all players hunker down side by side, in order to push the entire team forward. While sports analogies are well and good, I think of scrum more along the lines of an infantry division.&lt;/p&gt;

	&lt;p&gt;Here&amp;#8217;s why&amp;#8230;&lt;/p&gt;

	&lt;p&gt;A development team that utilizes scrum is said to be &amp;#8220;self governed.&amp;#8221; Meaning, while executives drive the overall vision and strategy of a company, it is up to those in the trenches to make it happen. Whereas a commander must have a broad idea of how a military campaign should play out, he delegates authority and trusts his troops to decide, in the field, how to accomplish their objectives.&lt;/p&gt;

	&lt;p&gt;&lt;img src="/sites/default/files/scrum_tactical_views.jpg" title="Executive / Developer" alt="Executive / Developer" width="500" height="200" /&gt;&lt;/p&gt;

	&lt;p&gt;This privilege of self governance demands a certain level of responsibility, and there are several key roles to be filled if one&amp;#8217;s scrum team is to be effective.&lt;/p&gt;

 &lt;hr /&gt;

	&lt;h4&gt;Sarge&lt;/h4&gt;

	&lt;p&gt;&lt;img src="/sites/default/files/scrum_drill_sergeant.jpg" class="picture" title="Drill Sergeant" alt="Drill Sergeant" width="80" height="80" /&gt; At the heart of the scrum process is the &lt;em&gt;scrum master&lt;/em&gt;. Typically someone with project management experience, this person can be thought of as a &lt;em&gt;sergeant at arms&lt;/em&gt;, one who keeps the group in-line and on-track. It is his duty to ensure that development groups operate as efficient units. Anything affecting team cohesion is flagged as an impediment to be removed.&lt;/p&gt;

	&lt;p&gt;A good scrum master keeps a watchful eye over the entire team, ensuring that due diligence such as code reviews are done, and that the process is not being circumvented or slighted. He understands that in order for scrum to work, there must be complete buy-in from the team, and strives to make it happen.&lt;/p&gt;

 &lt;hr /&gt;

	&lt;h4&gt;Comm.&lt;/h4&gt;

	&lt;p&gt;&lt;img src="/sites/default/files/scrum_infantry_comm.jpg" class="picture" title="Comm. Infantry" alt="Comm. Infantry" width="80" height="80" /&gt; On a scrum team, &lt;em&gt;product owners&lt;/em&gt; are not unlike a squad&amp;#8217;s field communications specialists. They relay information to the team from headquarters (and vice versa), helping to shape and define the parameters of success. They are on the team, but their purpose is to serve as a proxy for those outside and/or above the development group, who have a stake in the outcome.&lt;/p&gt;

	&lt;p&gt;Those best suited to a PO role have &lt;em&gt;business analyst&lt;/em&gt; experience or can empathize with users of the software. They are often voices of reason and temperance when things get tough, because they care about the continuity of the product.&lt;/p&gt;

 &lt;hr /&gt;

	&lt;h4&gt;Infantry&lt;/h4&gt;

	&lt;p&gt;&lt;img src="/sites/default/files/scrum_infantry_soldier.jpg" class="picture" title="Infantry Soldier" alt="Infantry Soldier" width="80" height="80" /&gt; This classification comprises the bulk of the team. Not given to any particularly fancy scrum related titles, they are simply referred to as &lt;em&gt;developers&lt;/em&gt;. Without these guys, the army simply would not exist. Amongst them are programmers, database admins, system architects. They do the heavy lifting &amp;#8211; holding the front line, steadily advancing toward the objective.&lt;/p&gt;

	&lt;p&gt;Agile, Mobile, Hostile &amp;#8212; Hoo-rah!&lt;/p&gt;

	&lt;p&gt;It is because of them that the scrum process is effective. At our company, development teams work in three week iterations, dubbed scrum &amp;#8220;sprints.&amp;#8221; I think of it as securing that next strategic hill, bridge, or landmark. After each incremental victory, the team identifies the next logical target to tackle. Acting in concerted effort, they are indeed a formidable force to be reckoned with.&lt;/p&gt;

 &lt;hr /&gt;

	&lt;h4&gt;Medic!&lt;/h4&gt;

	&lt;p&gt;&lt;img src="/sites/default/files/scrum_combat_medic.jpg" class="picture" title="Combat Medic" alt="Combat Medic" width="80" height="80" /&gt; Disturbingly common is how many groups operate without the support of good quality assurance specialists. On our team, as part of our &lt;em&gt;definition of done&lt;/em&gt;, if QA has not reviewed it and deemed it solid, our product simply cannot be shipped with that feature. Ideally, QA wouldn&amp;#8217;t be needed, spending the day like the &lt;a href="http://en.wikipedia.org/wiki/File:Maytag_repairman.jpg"&gt;Maytag man&lt;/a&gt;, awaiting a call for help that never comes.&lt;/p&gt;

	&lt;p&gt;Yet in the real world, despite the best planning and the most earnest of efforts, things get messy. Perhaps nobody is as much appreciated, yet unsung, as those in our QA department. They are truly a top-notch group, two of whom have degrees in computer science. I cannot tell you how helpful it is to have professionals who assess the symptoms of a problem, and suggest an efficient remedy.&lt;/p&gt;

 &lt;hr /&gt;

	&lt;h4&gt;Recon&lt;/h4&gt;

	&lt;p&gt;&lt;img src="/sites/default/files/scrum_scout_sniper.jpg" class="picture" title="Scout Sniper" alt="Scout Sniper" width="80" height="80" /&gt; There is some ambiguity and ongoing debate amongst scrum centric developers and project managers, as to where the &lt;em&gt;user experience&lt;/em&gt; aspect of web design fits into the team workflow. To me as a &lt;em&gt;UX developer&lt;/em&gt; (aka &lt;em&gt;designer&lt;/em&gt;), this is purely pedantic. In reality, to exclude design from the software development process is to invite confusion later on down the line.&lt;/p&gt;

	&lt;p&gt;In this regard, myself and others on our UX team serve as scout snipers, running at least one sprint ahead of the server side developers, in order to plot a course of action. This affords ample time to build design &lt;a href="http://developer.fellowshipone.com/patterns/"&gt;patterns&lt;/a&gt; and refine interfaces. In terms of problem solving, we frequently dispatch issues with a surgical &amp;#8220;head shot&amp;#8221; so to speak, without having to involve the entire dev team.&lt;/p&gt;

	&lt;p&gt;Not unlike snipers, designers typically pride themselves on keen visual awareness and quick acclimation to new environments. They are also brash and cocky enough to believe that otherwise big problems can be solved with magic bullets. I mean, what &lt;em&gt;can&amp;#8217;t&lt;/em&gt; be done with &lt;a href="http://www.adobe.com/products/fireworks/"&gt;Fireworks&lt;/a&gt;, &lt;span class="caps"&gt;CSS&lt;/span&gt;, and JavaScript &amp;#8212; right?&lt;/p&gt;

	&lt;p&gt;Though we map out UX sprints well ahead of when templates will be wired-up on the server side, each dev team is allotted a designer. This means that we are each simultaneously a member of two groups. On the dev sprint side, we are seen as zero-hour scrum resources, to be called upon as needed.&lt;/p&gt;

	&lt;p&gt;We account for this by budgeting enough flex time within our UX design sprints, to allow for tasks to be assigned to us from our respective development sprints. In this way, we can venture &amp;#8220;out ahead&amp;#8221; of the larger teams, but also circle back to help fortify the effort. To me, this is how scrum ought to be done.&lt;/p&gt;

 &lt;hr /&gt;

	&lt;h4&gt;V-Day&lt;/h4&gt;

	&lt;p&gt;Ah, deployment. This is the day (or most likely, late evening) that marks the culmination of a well executed series of sprints, providing new functionality to customers, enhancements to existing features, and a better overall piece of software in general. As a team member, one cannot help but feel a bit elated, as the escalated stress of the release date subsides. You congratulate fellow comrades on their diligence, and are equally encouraged by them.&lt;/p&gt;

	&lt;p&gt;&lt;img src="/sites/default/files/scrum_v_day.jpg" title="Victory Day" alt="Victory Day" width="500" height="200" /&gt;&lt;/p&gt;

	&lt;p&gt;As a team, you are collectively aware that a shared sense of accomplishment is only as valid as future sprint successes. And so you go, once again into the fray, gauging the level of effort and number of hours it will take to plant that next triumphant flag in the sand. The process begins anew. Marching orders, reconnaissance, digging-in locked n&amp;#8217; loaded &amp;#8212; all to build better software.&lt;/p&gt;

	&lt;p&gt;That&amp;#8217;s what scrum is all about.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sonspring?a=enPQOX1-ndE:IR1Yhol4sBw: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=enPQOX1-ndE:IR1Yhol4sBw: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;</description>
 <category domain="http://sonspring.com/topic/leadership">Leadership</category>
 <pubDate>Sun, 07 Feb 2010 01:24:15 +0000</pubDate>
 <dc:creator>Nathan Smith</dc:creator>
 <guid isPermaLink="false">323 at http://sonspring.com</guid>
</item>
<item>
 <title>jQuery Englightenment</title>
 <link>http://sonspring.com/journal/jquery-englightenment</link>
 <description>&lt;p&gt;&lt;a href="http://jqueryenlightenment.com/"&gt;&lt;img src="/sites/default/files/225.gif" title="" alt="" width="450" height="220" /&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:B7CSmp-QNI8: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:B7CSmp-QNI8: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;</description>
 <category domain="http://sonspring.com/topic/javascript">JavaScript</category>
 <pubDate>Fri, 30 Oct 2009 15:34:04 +0000</pubDate>
 <dc:creator>Nathan Smith</dc:creator>
 <guid isPermaLink="false">273 at http://sonspring.com</guid>
</item>
<item>
 <title>jQuery Desktop</title>
 <link>http://sonspring.com/journal/jquery-desktop</link>
 <description>&lt;p&gt;&lt;a href="http://desktop.sonspring.com/"&gt;&lt;img src="/sites/default/files/219.jpg" title="jQuery Desktop" alt="jQuery Desktop" width="450" height="330" /&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://github.com/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="/sites/default/files/221.gif" title="Firefox + Safari - rounded corners + box-shadow" alt="Firefox + Safari - rounded corners + box-shadow" width="450" height="104" /&gt;&lt;/p&gt;

	&lt;p&gt;&lt;img src="/sites/default/files/222.gif" title="Opera + Internet Explorer - no rounded corners / box-shadow" alt="Opera + Internet Explorer - no rounded corners / box-shadow" width="450" height="104" /&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="/sites/default/files/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" width="450" height="210" /&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;abbr title="jQuery Desktop"&gt;&lt;span class="caps"&gt;JQD&lt;/span&gt;&lt;/abbr&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;abbr title="Document Object Model"&gt;&lt;span class="caps"&gt;DOM&lt;/span&gt;&lt;/abbr&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;abbr title="Graphical User Interface"&gt;&lt;span class="caps"&gt;GUI&lt;/span&gt;&lt;/abbr&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://github.com/nathansmith/jquery-desktop/"&gt;GitHub&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:Sz6Ge6AVRsA: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:Sz6Ge6AVRsA: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;</description>
 <category domain="http://sonspring.com/topic/javascript">JavaScript</category>
 <pubDate>Fri, 25 Sep 2009 07:32:51 +0000</pubDate>
 <dc:creator>Nathan Smith</dc:creator>
 <guid isPermaLink="false">272 at http://sonspring.com</guid>
</item>
<item>
 <title>My Leadership Style</title>
 <link>http://sonspring.com/journal/my-leadership-style</link>
 <description>&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:giXpKmotNQ0: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:giXpKmotNQ0: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;</description>
 <category domain="http://sonspring.com/topic/leadership">Leadership</category>
 <pubDate>Wed, 12 Aug 2009 08:45:00 +0000</pubDate>
 <dc:creator>Nathan Smith</dc:creator>
 <guid isPermaLink="false">271 at http://sonspring.com</guid>
</item>
<item>
 <title>Symphonic Leadership</title>
 <link>http://sonspring.com/journal/symphonic-leadership</link>
 <description>&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="/sites/default/files/218.jpg" title="Lorin Maazel" alt="Lorin Maazel" width="450" height="150" /&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:EVb8Qzj9U4I: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:EVb8Qzj9U4I: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;</description>
 <category domain="http://sonspring.com/topic/leadership">Leadership</category>
 <pubDate>Wed, 29 Jul 2009 08:12:20 +0000</pubDate>
 <dc:creator>Nathan Smith</dc:creator>
 <guid isPermaLink="false">270 at http://sonspring.com</guid>
</item>
<item>
 <title>Design 4 Drupal</title>
 <link>http://sonspring.com/journal/design-4-drupal</link>
 <description>&lt;p&gt;&lt;small&gt;My 5-month old, at D4D&lt;/small&gt;&lt;br /&gt;
&lt;img src="/sites/default/files/217.jpg" title="Hudson @ D4D" alt="Hudson @ D4D" width="450" height="300" /&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;abbr title="Application Programming Interface"&gt;&lt;span class="caps"&gt;API&lt;/span&gt;&lt;/abbr&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:Q57YLPqKOx4: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:Q57YLPqKOx4: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;</description>
 <category domain="http://sonspring.com/topic/content-management">Content Management</category>
 <pubDate>Wed, 17 Jun 2009 08:41:53 +0000</pubDate>
 <dc:creator>Nathan Smith</dc:creator>
 <guid isPermaLink="false">269 at http://sonspring.com</guid>
</item>
<item>
 <title>F1 + EE Module</title>
 <link>http://sonspring.com/journal/f1-ee-module</link>
 <description>&lt;p&gt;In preparation for our annual &lt;a href="http://dynamicchurchconference.com/"&gt;Dynamic Church Conferece&lt;/a&gt; &amp;#8212; For the past month or so, my coworkers and I have been diligently (read: frantically) working on our respective applications that each consume the brand new Fellowship One &lt;a href="http://en.wikipedia.org/wiki/REST"&gt;&lt;span class="caps"&gt;REST&lt;/span&gt;ful&lt;/a&gt; &lt;abbr title="Application Programming Interface"&gt;&lt;span class="caps"&gt;API&lt;/span&gt;&lt;/abbr&gt;. I was half of a two-man team tasked with creating an &lt;a href="http://expressionengine.com/"&gt;EE&lt;/a&gt; module, to allow churches to display a list of members within their own site.&lt;/p&gt;

	&lt;p&gt;We dubbed it &lt;em&gt;Listee&lt;/em&gt; (play on the &amp;#8220;EE&amp;#8221; moniker). Here&amp;#8217;s a demo video&amp;#8230;&lt;/p&gt;

&lt;hr /&gt;
&lt;p&gt;
&lt;object width="450" height="280"&gt;
&lt;param name="allowfullscreen" value="true" /&gt;
&lt;param name="allowscriptaccess" value="always" /&gt;
&lt;param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=4639724&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" /&gt;
&lt;embed src="http://vimeo.com/moogaloop.swf?clip_id=4639724&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="450" height="280"&gt;
&lt;/embed&gt;
&lt;/object&gt;
&lt;/p&gt;
&lt;hr /&gt;

	&lt;p&gt;Without going into too much detail, since that will eventually be posted on our forthcoming developer site anyway, let me just cover a few tech points. It requires &lt;span class="caps"&gt;PHP&lt;/span&gt; version 5, because we are parsing a &lt;abbr title="JavaScript Object Notation"&gt;&lt;span class="caps"&gt;JSON&lt;/span&gt;&lt;/abbr&gt; response. For me, this was the format I&amp;#8217;m most familiar with, though the &lt;span class="caps"&gt;API&lt;/span&gt; also supports &lt;span class="caps"&gt;XML&lt;/span&gt;.&lt;/p&gt;

	&lt;p&gt;It was a cool exercise to familiarize myself with the inner workings of EE, and how the various {exp} tags hook into &lt;span class="caps"&gt;PHP&lt;/span&gt; classes and methods. It was also interesting to learn more about &lt;a href="http://oauth.net/"&gt;OAuth&lt;/a&gt;, though most of the hard work was done by a coworker, who built a library that we used for both EE and Facebook.&lt;/p&gt;

	&lt;p&gt;All in all, I&amp;#8217;m pretty happy with how it turned out. The cool thing is, with the lessons learned here, we are going to be able to pass over a good chunk of the &lt;span class="caps"&gt;PHP&lt;/span&gt; code to be used in other content management systems. In fact, there is already an effort underway to integrate Fellowship One with &lt;a href="http://drupal.org/project/f1"&gt;Drupal&lt;/a&gt;.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sonspring?a=lcdivE2WZA8:o01JfPjWTr0: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=lcdivE2WZA8:o01JfPjWTr0: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;</description>
 <category domain="http://sonspring.com/topic/content-management">Content Management</category>
 <pubDate>Thu, 14 May 2009 03:28:08 +0000</pubDate>
 <dc:creator>Nathan Smith</dc:creator>
 <guid isPermaLink="false">268 at http://sonspring.com</guid>
</item>
<item>
 <title>Drupal 6 Themes</title>
 <link>http://sonspring.com/journal/drupal-6-themes</link>
 <description>&lt;p&gt;I recently read &lt;a href="http://www.packtpub.com/drupal-6-themes/book"&gt;Drupal 6 Themes&lt;/a&gt;, by &lt;a href="http://ricshreves.net/"&gt;Ric Shreves&lt;/a&gt; &amp;#8211; a partner at design and development firm &lt;a href="http://waterandstone.com/"&gt;Water&amp;amp;Stone&lt;/a&gt;. I found the book to be a great resource.&lt;/p&gt;

	&lt;p&gt;&lt;a href="http://www.packtpub.com/drupal-6-themes/book"&gt;&lt;img src="/sites/default/files/216.gif" class="picture" title="Drupal 6 Themes" alt="Drupal 6 Themes" width="100" height="123" /&gt;&lt;/a&gt; Lately I have been digging further into &lt;a href="http://drupal.org/"&gt;Drupal&lt;/a&gt;, an open source content management platform that describes itself lightheartedly as &amp;#8220;community plumbing.&amp;#8221; These &lt;a href="http://en.wikipedia.org/wiki/Series_of_tubes"&gt;tubes&lt;/a&gt; have been used to power many high profile sites, which all have their own distinct look and feel. It appeals to me because it&amp;#8217;s more powerful than simple blogging software, but with that comes a bit of complexity. Thankfully, it is actually quite intuitive once one makes sense of how it works.&lt;/p&gt;

	&lt;p&gt;This allows for a great deal of flexibility in terms of design. Looking at sites that use Drupal reads like a veritable who&amp;#8217;s-who of technology / innovation&amp;#8230;&lt;/p&gt;

	&lt;ul&gt;
		&lt;li&gt;&lt;a href="http://www.csail.mit.edu/"&gt;csail.mit.edu&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a href="http://www.fastcompany.com/"&gt;fastcompany.com&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a href="http://www.infoworld.com/"&gt;infoworld.com&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a href="http://www.linuxfoundation.org/"&gt;linuxfoundation.org&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a href="http://www.recovery.gov/"&gt;recovery.gov&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a href="http://research.nokia.com/"&gt;research.nokia.com&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a href="http://buytaert.net/tag/drupal-sites"&gt;&amp;#8230;more&lt;/a&gt;&lt;/li&gt;
	&lt;/ul&gt;

	&lt;p&gt;While some have criticized Drupal in the past as being difficult for designers to customize, and that was probably a valid concern (at the time), the latest version is quite designer friendly &amp;#8211; made so via the &lt;em&gt;&lt;span class="caps"&gt;PHPT&lt;/span&gt;emplate&lt;/em&gt; engine that is built into the system. While it is &amp;#8220;just&amp;#8221; &lt;span class="caps"&gt;PHP&lt;/span&gt;, it is quite a bit simpler in terms of building templates than writing out raw code long-hand. So one could say, it is as designer friendly as other systems that rely on &lt;span class="caps"&gt;PHP&lt;/span&gt; for templating.&lt;/p&gt;

	&lt;p&gt;Shreves did a great job covering all that is possible within Drupal, from a design standpoint. He begins by explaining how the inner workings of the system fit together, and how this allows for a designer to override and tweak &lt;em&gt;everything&lt;/em&gt;. He then shows how to take an existing theme and build a sub-theme.&lt;/p&gt;

	&lt;p&gt;Of course, this is all just a precursor to chapter 7 and beyond, where Shreves really shines, showing you how to build your own fully customized themes. That&amp;#8217;s not to downplay the importance of the foundational material, as the earlier chapters build well upon each other. I am simply saying I found the chapters on doing your own design from scratch especially inspiring.&lt;/p&gt;

	&lt;p&gt;Overall, I would highly recommend this book to any code savvy web designers who are looking to take their skills to the next level with a full-fledged content management system. With newly acquired skills, you will be able to confidently tackle enterprise scale projects, building upon the versatility of Drupal.&lt;/p&gt;

 &lt;hr /&gt;

	&lt;h3&gt;Podcasts&lt;/h3&gt;

	&lt;p&gt;For me, a great way to learn about Drupal is to passively digest the information via listening to a podcast or watching a video. Here are some resources I&amp;#8217;ve found. If you have suggestions, feel free to leave a comment on this post.&lt;/p&gt;

	&lt;ul&gt;
		&lt;li&gt;&lt;a href="http://www.lullabot.com/podcast/"&gt;Lullabot Podcast&lt;/a&gt; &amp;#8211; Largely considered to be the &lt;em&gt;Voice of Drupal&lt;/em&gt;.&lt;/li&gt;
		&lt;li&gt;&lt;a href="http://acquia.com/community/resources/podcasts/"&gt;Acquia Podcast&lt;/a&gt; &amp;#8211; The company of Drupal creator &lt;a href="http://buytaert.net/"&gt;Dries Buytaert&lt;/a&gt;.&lt;/li&gt;
		&lt;li&gt;&lt;a href="http://gotdrupal.com/"&gt;Got Drupal&lt;/a&gt; &amp;#8211; Screencasts that range from beginner to advanced.&lt;/li&gt;
		&lt;li&gt;&lt;a href="http://geeksandgod.com/podcast/"&gt;Geeks &amp;amp; God&lt;/a&gt; &amp;#8211; Christian podcast that frequently shares Drupal tips.&lt;/li&gt;
		&lt;li&gt;&lt;a href="http://www.mustardseedmedia.com/podcast/"&gt;Mustardseed Media&lt;/a&gt; &amp;#8211; Video tutorials about Drupal. Co-host of G&amp;amp;G.&lt;/li&gt;
		&lt;li&gt;&lt;a href="http://www.leveltendesign.com/podcasts/speak-easy-drupal"&gt;Drupal Speakeasy&lt;/a&gt; &amp;#8211; A promising new podcast by LevelTen Design.&lt;/li&gt;
	&lt;/ul&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sonspring?a=tBVFGDb5kgk:basUvVVg30o: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=tBVFGDb5kgk:basUvVVg30o: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;</description>
 <category domain="http://sonspring.com/topic/product-review">Product Review</category>
 <pubDate>Mon, 04 May 2009 05:54:36 +0000</pubDate>
 <dc:creator>Nathan Smith</dc:creator>
 <guid isPermaLink="false">267 at http://sonspring.com</guid>
</item>
<item>
 <title>Keeping Digg Honest</title>
 <link>http://sonspring.com/journal/keeping-digg-honest</link>
 <description>&lt;p&gt;For those of you who know me, you also know that I have a love / hate relationship with Digg. They seem to love linking to my content, and I generally don&amp;#8217;t care for the negativity their readership brings both via comments on my site and Digg itself. In the past, I was simply &lt;a href="http://sonspring.com/journal/deflecting-digg"&gt;deflecting&lt;/a&gt; all Digg traffic.&lt;/p&gt;

	&lt;p&gt;However, friends convinced me the embargo really just hurt end-users, by not allowing them to get at the content they were seeking. Fair enough. Plus, it wasn&amp;#8217;t really Digg&amp;#8217;s fault that the majority of their readers act as they do.&lt;/p&gt;

	&lt;p&gt;Today though, via &lt;a href="http://haveamint.com/"&gt;Mint&lt;/a&gt; I noticed something that most definitely &lt;em&gt;does&lt;/em&gt; smack of suspicious activity. Namely, a clever form of content misappropriation. It&amp;#8217;s basically an &lt;code&gt;iframe&lt;/code&gt; that includes your site, with a &lt;em&gt;DiggBar&lt;/em&gt; at the top.&lt;/p&gt;

	&lt;p&gt;&lt;img src="/sites/default/files/215.jpg" title="DiggBar" alt="DiggBar" width="450" height="150" /&gt;&lt;/p&gt;

	&lt;p&gt;At first glance, this does not seem like a big deal, but it creates a twofold problem. First, it allows Digg to cross link various unrelated sites, all the while keeping their bar (potential advertisements) in front of users &amp;#8211; making a mini browser. Second and more importantly, it associates their brand with my site, and Digg is a brand I&amp;#8217;d rather distance myself from, given the choice.&lt;/p&gt;

	&lt;p&gt;That&amp;#8217;s the crux of my blog post. You, as a site owner and content creator, do have a choice. You can let Digg do whatever they want with your content, or you can add this simple bit of JavaScript to the &lt;code&gt;head&lt;/code&gt; of your document.&lt;/p&gt;

	&lt;p class="notice"&gt;&lt;strong&gt;Note:&lt;/strong&gt; To see this in action, check out this would-be &lt;strong&gt;&lt;a href="http://digg.com/d1rkQ" rel="nofollow"&gt;DiggBar link&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;
/* &amp;lt;![CDATA[ */
if (window.location !== window.top.location) {
    window.top.location = window.location;
}
/* ]]&amp;gt; */
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;Last I checked, large respected news sites such as &lt;a href="http://nytimes.com/"&gt;&lt;span class="caps"&gt;NYT&lt;/span&gt;imes.com&lt;/a&gt; use this method to keep scrapers from passing off &lt;abbr title="New York Times"&gt;&lt;span class="caps"&gt;NYT&lt;/span&gt;&lt;/abbr&gt; content as their own.&lt;/p&gt;

	&lt;p&gt;Basically, it asks the browser: Is this page being viewed in the uppermost window? If not, then you know it&amp;#8217;s in an &lt;code&gt;iframe&lt;/code&gt; in which case it redirects the entire browser to view the original page on your site, sans DiggBar.&lt;/p&gt;

	&lt;p&gt;The nice thing is &amp;#8211; Not only does this work for Digg, but it also will free your writing from the clutches of any other content leeches as well. I must admit, part of me feels bad. Used on a wide scale, this will take &amp;#8220;the wind out of the sails&amp;#8221; for a company that is &lt;a href="http://teddziuba.com/2009/04/diggbar-is-a-howl-of-desperati.html"&gt;desperately&lt;/a&gt; trying to find a business model.&lt;/p&gt;

	&lt;p class="notice"&gt;&lt;strong&gt;Update:&lt;/strong&gt; &lt;a href="http://farukat.es/journal/2009/04/225-javascript-diggbar-killer-not-blocker"&gt;Faruk Ates&lt;/a&gt; and &lt;a href="http://daringfireball.net/2009/04/how_to_block_the_diggbar"&gt;John Gruber&lt;/a&gt; have also posted their respective solutions to dealing with the lame-ness of the DiggBar. Gruber&amp;#8217;s is particularly brutal. Popular tech news site &lt;a href="http://www.joshuatopolsky.com/2009/04/10/why-engadget-is-blocking-the-diggbar/"&gt;Engadget&lt;/a&gt; (of Weblogs, Inc) is blocking it as well.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sonspring?a=KWs1NUm1FmU:Xxf4f-_nATo: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=KWs1NUm1FmU:Xxf4f-_nATo: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;</description>
 <category domain="http://sonspring.com/topic/javascript">JavaScript</category>
 <pubDate>Mon, 06 Apr 2009 01:35:11 +0000</pubDate>
 <dc:creator>Nathan Smith</dc:creator>
 <guid isPermaLink="false">266 at http://sonspring.com</guid>
</item>
<item>
 <title>Thoughts on Leadership</title>
 <link>http://sonspring.com/journal/thoughts-on-leadership</link>
 <description>&lt;p&gt;For a recent seminary assignment, we were asked to share our personal definition of leadership, and address the question: &amp;#8220;Why do church leaders fail?&amp;#8221; We were supposed to answer in approximately 400 words. After typing my response, I thought it might also make for a good blog post. Here &amp;#8216;tis&amp;#8230;&lt;/p&gt;

 &lt;hr /&gt;

	&lt;p&gt;My definition of a leader is someone who is &amp;#8220;in the trenches.&amp;#8221; A leader is often thought of as someone who sends others to fight for his cause. The true model of leadership is found in the inverse: someone who is willing to die for those s/he leads. I think we see people fail at leadership because they have misplaced motives. They want the title of “leader” but for self-glorification, not the edification of those they purport to shepherd. They want to pad a résumé, not build a congregation.&lt;/p&gt;

	&lt;p&gt;One key tenet of a leader is that s/he never asks of subordinates something that that s/he is unwilling to endeavor to accomplish him/herself. I think another way to describe it is a player-coach. The best suited to lead a group of like-minded individuals is someone who has learned from the school of hard knocks what it means to achieve in a particular venue. When Michael Jordan was in the twilight of his athletic career, he briefly came out of retirement and worked on the coaching staff of the Wizards. He would also take the court from time to time, showing by example what it meant to exude excellence.&lt;/p&gt;

	&lt;p&gt;Much of my thoughts on good leadership come from friend, former co-worker and boss, &lt;a href="http://poetpainter.com/"&gt;Stephen P. Anderson&lt;/a&gt;. His philosophy on leadership is that a leader is supposed to inspire, not micro-manage. The last thing any organization needs is another &lt;abbr title="Master of Business Administration"&gt;&lt;span class="caps"&gt;MBA&lt;/span&gt;&lt;/abbr&gt; touting suit, thinking s/he has all the answers because it came straight from a textbook. Stephen&amp;#8217;s leadership style was very much lead by doing. When I thought my work was top-notch, he would look it over and say: “Have you considered&amp;#8230; ?” I both dreaded and looked forward to those moments. Dreaded, because I knew it would require more work on my part. I appreciated it though, because I knew that 95% of the time, he&amp;#8217;d be right. It was very much an iron sharpening iron experience working alongside him.&lt;/p&gt;

	&lt;p&gt;Though he and I don&amp;#8217;t work together anymore, I still hit him up for advice, when having a creative block. He always brings a fresh perspective to everything he does, and is very well versed in the psychology of how to best communicate. I asked him if he&amp;#8217;d be my mentor for this class, and he said: “I&amp;#8217;m flattered. I&amp;#8217;d love to be your mentor.” I think that&amp;#8217;s a key quality in leaders as well: They make others feel like a million-bucks, rather than working out their own insecurities by putting others down. A true leader has a quiet inner self-confidence.&lt;/p&gt;

	&lt;p&gt;Anyway, I&amp;#8217;m over my allotted 400 words. I do want to push this article though, because it succinctly summarizes much of my beliefs on effective leadership:&lt;/p&gt;

	&lt;p&gt;&amp;#8212; &lt;a href="http://poetpainter.com/thoughts/article/why-i-am-not-a-manager"&gt;Why I Am Not a Manager&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/sonspring?a=l6FPgtki"&gt;&lt;img src="http://feeds.feedburner.com/~f/sonspring?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/sonspring?a=OrjcKbMW"&gt;&lt;img src="http://feeds.feedburner.com/~f/sonspring?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
 <category domain="http://sonspring.com/topic/leadership">Leadership</category>
 <pubDate>Tue, 24 Feb 2009 05:57:39 +0000</pubDate>
 <dc:creator>Nathan Smith</dc:creator>
 <guid isPermaLink="false">265 at http://sonspring.com</guid>
</item>
</channel>
</rss>
