<?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:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>Josh Holmes</title><link>http://www.joshholmes.com/blog/</link><description>What Box? Nobody told me about a box...</description><language>en-us</language><copyright>Josh Holmes</copyright><lastBuildDate>Wed, 28 Oct 2009 19:14:56 GMT</lastBuildDate><generator>newtelligence dasBlog 2.3.9074.18820</generator><managingEditor>josh@joshholmes.com</managingEditor><webMaster>josh@joshholmes.com</webMaster><geo:lat>42.14784</geo:lat><geo:long>-84.031232</geo:long><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/JoshHolmes" type="application/rss+xml" /><feedburner:emailServiceId>JoshHolmes</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item><trackback:ping>http://www.joshholmes.com/blog/Trackback.aspx?guid=78f7e0f4-14b1-4f63-98e0-b0ddc7a63288</trackback:ping><pingback:server>http://www.joshholmes.com/blog/pingback.aspx</pingback:server><pingback:target>http://www.joshholmes.com/blog/PermaLink,guid,78f7e0f4-14b1-4f63-98e0-b0ddc7a63288.aspx</pingback:target><dc:creator>Josh Holmes</dc:creator><wfw:comment>http://www.joshholmes.com/blog/CommentView,guid,78f7e0f4-14b1-4f63-98e0-b0ddc7a63288.aspx</wfw:comment><wfw:commentRss>http://www.joshholmes.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=78f7e0f4-14b1-4f63-98e0-b0ddc7a63288</wfw:commentRss><title>Updating the Simple Silverlight Countdown Blog badge</title><guid isPermaLink="false">http://www.joshholmes.com/blog/PermaLink,guid,78f7e0f4-14b1-4f63-98e0-b0ddc7a63288.aspx</guid><link>http://feedproxy.google.com/~r/JoshHolmes/~3/Xd6BrbP-YEA/UpdatingTheSimpleSilverlightCountdownBlogBadge.aspx</link><pubDate>Wed, 28 Oct 2009 19:14:56 GMT</pubDate><description>&lt;body xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;&lt;a href="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/UpdatingtheSimpleSilverlightCountdownBlo_CA60/image_6.png"&gt;&lt;img style="border-right-width: 0px; margin: 5px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" align="left" src="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/UpdatingtheSimpleSilverlightCountdownBlo_CA60/image_thumb_2.png" width="109" height="213"&gt;&lt;/img&gt;&lt;/a&gt; When&#xD;
I was preparing for RIAPalooza, I created and blogged about &lt;a href="http://www.joshholmes.com/blog/2009/04/28/CreatingASimpleSilverlightCountdownBlogBadge.aspx"&gt;Creating&#xD;
a Simple Silverlight Countdown Blog badge&lt;/a&gt;. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
It was great but I wanted to updated it for the next event and realized that recompiling&#xD;
it was not really a user friendly option. The answer is that I updated the widget&#xD;
to have a level of parameterization so that I could easily update it without having&#xD;
to recode everything. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
*Update – &lt;a href="http://www.joshholmes.com/resources/silvercountdown2.zip"&gt;Source&#xD;
Code&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&#xD;
The good news is that there’s a mechanism called InitParams that allows you to pass&#xD;
in initialization parameters on startup. I’m not wild about the mechanism itself as&#xD;
it’s just a key-value pair string and not individual parameters but it works. The&#xD;
alternative is to do something where you write some javascript that will call into&#xD;
the Silverlight object and set parameters. While that works, it wasn’t my first choice&#xD;
because you have to worry about the order of events, exposing objects as scriptable&#xD;
and so on.&#xD;
&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;object &lt;/span&gt;&lt;span style="color: red"&gt;data&lt;/span&gt;&lt;span style="color: blue"&gt;="data:application/x-silverlight-2," &#xD;
&lt;br&gt;&lt;/span&gt;&lt;span style="color: red"&gt;type&lt;/span&gt;&lt;span style="color: blue"&gt;="application/x-silverlight-2" &lt;/span&gt;&lt;span style="color: red"&gt;width&lt;/span&gt;&lt;span style="color: blue"&gt;="100%" &lt;/span&gt;&lt;span style="color: red"&gt;height&lt;/span&gt;&lt;span style="color: blue"&gt;="100%"&amp;gt; &lt;/span&gt;&lt;span style="color: blue"&gt;.&#xD;
. . &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;param &lt;/span&gt;&lt;span style="color: red"&gt;name&lt;/span&gt;&lt;span style="color: blue"&gt;="initParams" &#xD;
&lt;br&gt;&lt;/span&gt;&lt;span style="color: red"&gt;value&lt;/span&gt;&lt;span style="color: blue"&gt;="eventDate=01/13/2010,registrationUrl=www.codemash.com,&lt;br&gt;&#xD;
registerText=Check it out!,startImageUrl=logo_codemash_2010.jpg,&lt;br&gt;&#xD;
endImageUrl=logo_codemash_2009.jpg" /&amp;gt; . . . &#xD;
&lt;br&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;object&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;p&gt;&#xD;
Notice that there are multiple parameters here separated by commas. The first one&#xD;
is a date and the second one is a URL and so on. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
To access that init parameter in the startup you need to open the App class found&#xD;
in App.xaml.cs and in any method use the Host object’s InitParams list. &#xD;
&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;string &lt;/span&gt;fieldValue = &lt;span style="color: blue"&gt;this&lt;/span&gt;.Host.InitParams[key];&lt;/pre&gt;&lt;p&gt;&#xD;
For a lot of reasons, I wrap that up in a method as follows:&#xD;
&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;private string &lt;/span&gt;GetInitParam(&lt;span style="color: blue"&gt;string &lt;/span&gt;key)&#xD;
{ &lt;span style="color: blue"&gt;string &lt;/span&gt;fieldValue = &lt;span style="color: #a31515"&gt;""&lt;/span&gt;; &lt;span style="color: blue"&gt;if &lt;/span&gt;(&lt;span style="color: blue"&gt;this&lt;/span&gt;.Host.InitParams.ContainsKey(key))&#xD;
{ fieldValue = &lt;span style="color: blue"&gt;this&lt;/span&gt;.Host.InitParams[key]; } &lt;span style="color: blue"&gt;return &lt;/span&gt;fieldValue;&#xD;
}&lt;/pre&gt;&lt;p&gt;&#xD;
This allows me to quickly add a lot of new parameters and write the OnStartup method&#xD;
as follows:&#xD;
&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;private void &lt;/span&gt;OnStartup(&lt;span style="color: blue"&gt;object &lt;/span&gt;sender, &lt;span style="color: #2b91af"&gt;StartupEventArgs &lt;/span&gt;e)&#xD;
{ &lt;span style="color: blue"&gt;string &lt;/span&gt;DateTimeString = GetInitParam(&lt;span style="color: #a31515"&gt;"eventDate"&lt;/span&gt;); &lt;span style="color: #2b91af"&gt;DateTime &lt;/span&gt;eventDate&#xD;
= &lt;span style="color: #2b91af"&gt;DateTime&lt;/span&gt;.MinValue; &lt;span style="color: blue"&gt;if &lt;/span&gt;(DateTimeString.Length&#xD;
&amp;gt; 0) { &lt;span style="color: blue"&gt;try &lt;/span&gt;{ eventDate = &lt;span style="color: #2b91af"&gt;DateTime&lt;/span&gt;.Parse(DateTimeString);&#xD;
} &lt;span style="color: blue"&gt;catch &lt;/span&gt;{ } } &lt;span style="color: blue"&gt;string &lt;/span&gt;backGroundUrl&#xD;
= GetInitParam(&lt;span style="color: #a31515"&gt;"background"&lt;/span&gt;); &lt;span style="color: blue"&gt;string &lt;/span&gt;startImageUrl&#xD;
= GetInitParam(&lt;span style="color: #a31515"&gt;"startImageUrl"&lt;/span&gt;); &lt;span style="color: blue"&gt;string &lt;/span&gt;endImageUrl&#xD;
= GetInitParam(&lt;span style="color: #a31515"&gt;"endImageUrl"&lt;/span&gt;); &lt;span style="color: blue"&gt;string &lt;/span&gt;registrationUrl&#xD;
= GetInitParam(&lt;span style="color: #a31515"&gt;"registrationUrl"&lt;/span&gt;); &lt;span style="color: blue"&gt;string &lt;/span&gt;registerText&#xD;
= GetInitParam(&lt;span style="color: #a31515"&gt;"registerText"&lt;/span&gt;); &lt;span style="color: green"&gt;//&#xD;
Load the main control here &lt;/span&gt;&lt;span style="color: blue"&gt;this&lt;/span&gt;.RootVisual&#xD;
= &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Page&lt;/span&gt;( eventDate,&#xD;
backGroundUrl, startImageUrl, endImageUrl, registrationUrl, registerText); }&lt;/pre&gt;&lt;p&gt;&#xD;
Notice that I’m calling a custom constructor on the Page class. That looks as follows:&#xD;
&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: #2b91af"&gt;Timer &lt;/span&gt;_timer = &lt;span style="color: blue"&gt;null&lt;/span&gt;; &lt;span style="color: blue"&gt;public &lt;/span&gt;Page()&#xD;
: &lt;span style="color: blue"&gt;this&lt;/span&gt;(&lt;span style="color: #2b91af"&gt;DateTime&lt;/span&gt;.Now, &lt;span style="color: #a31515"&gt;""&lt;/span&gt;, &lt;span style="color: #a31515"&gt;""&lt;/span&gt;, &lt;span style="color: #a31515"&gt;""&lt;/span&gt;, &lt;span style="color: #a31515"&gt;""&lt;/span&gt;, &lt;span style="color: #a31515"&gt;""&lt;/span&gt;)&#xD;
{} &lt;span style="color: blue"&gt;public &lt;/span&gt;Page(&lt;span style="color: #2b91af"&gt;DateTime &lt;/span&gt;eventDate, &lt;span style="color: blue"&gt;string &lt;/span&gt;backGroundImageUrl, &#xD;
&lt;br&gt;&lt;span style="color: blue"&gt;string &lt;/span&gt;imageStartUrl, &lt;span style="color: blue"&gt;string &lt;/span&gt;imageEndUrl, &#xD;
&lt;br&gt;&lt;span style="color: blue"&gt;string &lt;/span&gt;registrationUrl, &lt;span style="color: blue"&gt;string &lt;/span&gt;registrationText)&#xD;
{ EventDateTime = eventDate; &lt;span style="color: green"&gt;// Required to initialize&#xD;
variables &lt;/span&gt;InitializeComponent(); &lt;span style="color: blue"&gt;if &lt;/span&gt;(backGroundImageUrl.Length&#xD;
&amp;gt; 0) { backGroundImage.Source = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;BitmapImage&lt;/span&gt;(&lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Uri&lt;/span&gt;(backGroundImageUrl, &lt;span style="color: #2b91af"&gt;UriKind&lt;/span&gt;.Relative));&#xD;
} &lt;span style="color: blue"&gt;if &lt;/span&gt;(imageStartUrl.Length &amp;gt; 0) { image.Source&#xD;
= &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;BitmapImage&lt;/span&gt;(&lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Uri&lt;/span&gt;(imageStartUrl, &lt;span style="color: #2b91af"&gt;UriKind&lt;/span&gt;.Relative));&#xD;
} &lt;span style="color: blue"&gt;if &lt;/span&gt;(imageEndUrl.Length &amp;gt; 0) { image1.Source&#xD;
= &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;BitmapImage&lt;/span&gt;(&lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Uri&lt;/span&gt;(imageEndUrl, &lt;span style="color: #2b91af"&gt;UriKind&lt;/span&gt;.Relative));&#xD;
} &lt;span style="color: blue"&gt;if &lt;/span&gt;(registrationUrl.Length &amp;gt; 0) { linkRegistrationButton.NavigateUri&#xD;
= &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Uri&lt;/span&gt;(&lt;span style="color: #a31515"&gt;"http://" &lt;/span&gt;+&#xD;
registrationUrl); } &lt;span style="color: blue"&gt;if &lt;/span&gt;(registrationText.Length &amp;gt;&#xD;
0) { linkRegistrationButton.Content = registrationText; } _timer = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Timer&lt;/span&gt;(&lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;TimerCallback&lt;/span&gt;(Timer_Tick), &lt;span style="color: blue"&gt;null&lt;/span&gt;,&#xD;
0, 1000); AnimateLogos.AutoReverse = &lt;span style="color: blue"&gt;true&lt;/span&gt;; AnimateLogos.RepeatBehavior&#xD;
= &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;RepeatBehavior&lt;/span&gt;(1000);&#xD;
AnimateLogos.Begin(); }&lt;/pre&gt;&lt;p&gt;&#xD;
That’s all that was required for making it parameterized so that I can update it quickly. &#xD;
&lt;/p&gt;&lt;img width="0" height="0" src="http://www.joshholmes.com/blog/aggbug.ashx?id=78f7e0f4-14b1-4f63-98e0-b0ddc7a63288"&gt;&lt;/img&gt;&lt;br&gt;&lt;hr&gt;&lt;/hr&gt;&#xD;
This weblog is sponsored by &amp;lt;a href="http://www.joshholmes.com"&amp;gt;Josh Holmes&amp;lt;/a&amp;gt;. &#xD;
&lt;/body&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JoshHolmes?a=Xd6BrbP-YEA:c5SxPKnhPwQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoshHolmes?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoshHolmes?a=Xd6BrbP-YEA:c5SxPKnhPwQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoshHolmes?i=Xd6BrbP-YEA:c5SxPKnhPwQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoshHolmes?a=Xd6BrbP-YEA:c5SxPKnhPwQ:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoshHolmes?i=Xd6BrbP-YEA:c5SxPKnhPwQ:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoshHolmes?a=Xd6BrbP-YEA:c5SxPKnhPwQ:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoshHolmes?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoshHolmes?a=Xd6BrbP-YEA:c5SxPKnhPwQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoshHolmes?i=Xd6BrbP-YEA:c5SxPKnhPwQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JoshHolmes/~4/Xd6BrbP-YEA" height="1" width="1"/&gt;</description><comments>http://www.joshholmes.com/blog/CommentView,guid,78f7e0f4-14b1-4f63-98e0-b0ddc7a63288.aspx</comments><category>Silverlight</category><feedburner:origLink>http://www.joshholmes.com/blog/2009/10/28/UpdatingTheSimpleSilverlightCountdownBlogBadge.aspx</feedburner:origLink></item><item><trackback:ping>http://www.joshholmes.com/blog/Trackback.aspx?guid=60aee1ac-72ce-4afa-9908-81b865f6f8ba</trackback:ping><pingback:server>http://www.joshholmes.com/blog/pingback.aspx</pingback:server><pingback:target>http://www.joshholmes.com/blog/PermaLink,guid,60aee1ac-72ce-4afa-9908-81b865f6f8ba.aspx</pingback:target><dc:creator>Josh Holmes</dc:creator><wfw:comment>http://www.joshholmes.com/blog/CommentView,guid,60aee1ac-72ce-4afa-9908-81b865f6f8ba.aspx</wfw:comment><wfw:commentRss>http://www.joshholmes.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=60aee1ac-72ce-4afa-9908-81b865f6f8ba</wfw:commentRss><title>Above the Fold and how It Really Should be Used</title><guid isPermaLink="false">http://www.joshholmes.com/blog/PermaLink,guid,60aee1ac-72ce-4afa-9908-81b865f6f8ba.aspx</guid><link>http://feedproxy.google.com/~r/JoshHolmes/~3/4YHwXnGmqiQ/AboveTheFoldAndHowItReallyShouldBeUsed.aspx</link><pubDate>Fri, 09 Oct 2009 18:01:24 GMT</pubDate><description>&lt;body xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;&lt;a title="Chicago 080" href="http://www.flickr.com/photos/87487802@N00/305909364/"&gt;&lt;img style="margin: 5px; display: inline" class="flickr" border="0" hspace="5" alt="Chicago 080" vspace="5" align="left" src="http://static.flickr.com/121/305909364_ef7b862b55_m.jpg"&gt;&lt;/img&gt;&lt;/a&gt;I’ve&#xD;
come to realize that many web designers don’t understand what “Above the Fold” and&#xD;
how it really should be used. Above the Fold is an old print newspaper layout term&#xD;
for what’s on the top part of the page, the part that is displayed in the window at&#xD;
the newspaper stand. In web design, the term is used for the bits that the user can&#xD;
see without having to scroll. I’ve talked and ranted about this before as It’s point&#xD;
number 23 in &lt;a href="http://www.slideshare.net/joshholmes/32-ways-to-keep-your-blog-from-sucking"&gt;32&#xD;
ways to keep your blog from sucking&lt;/a&gt;…&#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
&amp;lt;update&amp;gt;It was &lt;a href="http://twitter.com/richie_p/statuses/4742012403"&gt;brought&#xD;
to my attention&lt;/a&gt; that it’s often not a web designer but rather an Information Architect&#xD;
or a Developer who is updating the layout on the page. Completely agreed and this&#xD;
is yet another reason that you should look for competent web designers for the layout&#xD;
and design of your page.&amp;lt;/update&amp;gt;&#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
What’s bringing it up now is that &lt;a href="http://www.cxpartners.co.uk"&gt;CX Partners&lt;/a&gt; recently&#xD;
blogged about &lt;a href="http://www.cxpartners.co.uk/thoughts/the_myth_of_the_page_fold_evidence_from_user_testing.htm"&gt;The&#xD;
myth of the page fold: evidence from user testing | cxpartners&lt;/a&gt; and it concerned&#xD;
me a little. &lt;a href="http://www.cxpartners.co.uk"&gt;CX Partners&lt;/a&gt; does a lot of user&#xD;
testing and one of the things that they have tested for is whether or not the “Fold”&#xD;
mattered to users and out of 800 users, only 3 were unable to find content because&#xD;
they would have to scroll to find it. They are right, users are used to scrolling&#xD;
and are willing to do so if they know that there’s more content below. We just need&#xD;
to give them visual hints that there is more content that they will have to scroll&#xD;
to see. What they are trying to fight is the urge to put all of the content or at&#xD;
least all of the &lt;strong&gt;*important*&lt;/strong&gt; content Above the Fold and design pages&#xD;
so that users do have to scroll. I’m on board with that fight. Cramming all of the&#xD;
content into cramped margins and smashing things together just so that it can be seen&#xD;
without scrolling is horrible design. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
Here’s the part that concerns me as an old school print layout guy. There’s a fundamental&#xD;
miss on what the “Above the Fold” content is supposed to be used for in your layout&#xD;
whether it’s print or web design. &#xD;
&lt;/p&gt;&lt;h3&gt;How does print layout treat above the fold?&#xD;
&lt;/h3&gt;&lt;p&gt;&#xD;
The above the fold content is not meant to be the meat of the content or really even&#xD;
the most important content. It’s meant to be eye catching. It’s the lure for people&#xD;
to pick up the paper or magazine. &#xD;
&lt;/p&gt;&lt;p&gt;&lt;a title="100th Anniversary of the Seattle P-I Newspaper" href="http://www.flickr.com/photos/49233110@N00/3511599262/"&gt;&lt;img style="margin: 5px" class="flickr" border="0" hspace="5" alt="100th Anniversary of the Seattle P-I Newspaper" vspace="5" align="right" src="http://static.flickr.com/3382/3511599262_b040b36422_m.jpg"&gt;&lt;/img&gt;&lt;/a&gt;When&#xD;
thinking about the fold in a newspaper, think about the old school newspaper dispenser&#xD;
with the top half of the top page displayed in the little window. There is a deliberate&#xD;
attempt to put a catchy photo and headline in that window so people buy the paper.&#xD;
Is that the best thing in the paper, not even close. That’s the picture that’s going&#xD;
to look good on someone’s coffee table when they toss down the newspaper. &#xD;
&lt;/p&gt;&lt;p&gt;&lt;a title="New York 1st day. magazine stands" href="http://www.flickr.com/photos/24672979@N00/365878605/"&gt;&lt;img style="margin: 5px; display: inline" class="flickr" border="0" hspace="5" alt="New York 1st day. magazine stands" vspace="5" align="left" src="http://static.flickr.com/170/365878605_c707017c5d_m.jpg"&gt;&lt;/img&gt;&lt;/a&gt;Or&#xD;
better, think about the magazine stand and how there are potentially hundreds of magazines&#xD;
there and you need for yours to stand out enough that people will buy it. Think this&#xD;
through – what can they see in the magazine stand? Typically they can see the top&#xD;
edge of the magazine and part of the picture. I was amazed once when I was talking&#xD;
to a freelance sports photographer who told me that he’d net $40k-$60k for one photo&#xD;
if he could land the cover picture on Sports Illustrated. But it makes a ton of sense.&#xD;
This concept of trying to stand out on just a headline and a photo is not lost on&#xD;
the smart people at Sports Illustrated. The right picture could make far more than&#xD;
$40k worth of a difference on the stand. &#xD;
&lt;/p&gt;&lt;h3&gt;How does this apply to web design?&#xD;
&lt;/h3&gt;&lt;p&gt;&#xD;
Honestly, it’s the same exact concept. The fold or scroll line is the area of the&#xD;
page that people can see without having to scroll down the page. This area needs to&#xD;
catch people’s attention correctly because they may only be on you page for a few&#xD;
seconds. If you look at the statistics on any site that gets a decent amount of traffic&#xD;
and the average page view length is measured in seconds, not minutes. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
When people are browsing through and they get a link from another site or from a search&#xD;
engine, what’s the first thing that they see? Imagine that as if they are glancing&#xD;
past your page among the potentially hundreds of others that they are looking past&#xD;
which is really not that much of a stretch because they are looking to see which pages&#xD;
are more likely to fit their needs than others. They may not be paying for your content&#xD;
but they are investing their time.&#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
The problems come in two sizes. First, there are designs that try to shove as much&#xD;
content as they can into that above the fold area because there’s an assumption that&#xD;
if it’s not there, their users won’t see it. Second, there are other designs that&#xD;
completely shun the idea of scrolling and end up with these horrid wizard style pages&#xD;
where the user has to click through to see the next page and the next page and so&#xD;
on. Either of these are poor choices. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
Back to the article for a moment - I really liked &lt;a href="http://www.cxpartners.co.uk"&gt;CX&#xD;
Partners&lt;/a&gt;’s &lt;a href="http://www.cxpartners.co.uk/thoughts/the_myth_of_the_page_fold_evidence_from_user_testing.htm"&gt;“Design&#xD;
tips to encourage scrolling”&lt;/a&gt;. What was missing is the “How to hook them and keep&#xD;
them” bit. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
Let’s look at &lt;a href="http://jeffblankenburg.com"&gt;Jeff Blankenburg&lt;/a&gt;’s blog for&#xD;
a good reference here. &#xD;
&lt;/p&gt;&lt;p&gt;&lt;a href="http://jeffblankenburg.com"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/AbovetheFoldandwhatitreallyMeans_815C/image_3.png" width="551" height="364"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&#xD;
You know exactly what you are going to get on his page. The disk in the middle, which&#xD;
is what most people see first cycles through all of the social networks that he frequents.&#xD;
The tweets across the top express his last several publically blasted thoughts while&#xD;
the little bird that flies around them draws eyeballs to them. The menu shows you&#xD;
that he’s delivering Code and Slides through this blog in addition to other posts.&#xD;
The RSS tag that hangs down and swings a little definitely captures the attention&#xD;
and draws people to subscribe. Finally, the title of the blog and the first blog post&#xD;
start drawing eyes down the page to see the meat of the content. But what real content&#xD;
is above the fold on Jeff’s blog? Honestly, there’s none. All of the real content&#xD;
is below the fold so the user has to scroll for it. Going back to the &lt;a href="http://www.cxpartners.co.uk"&gt;CX&#xD;
Partners&lt;/a&gt; post, that’s fine. Users know how to and are willing to scroll for content&#xD;
if they find the page interesting. The &lt;strong&gt;*only*&lt;/strong&gt; thing that I dislike&#xD;
about his header is that it’s a fairly large chunk that takes 3-5 seconds to load&#xD;
the first time. This is a killer if the user is only on the page for 3 seconds.&#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
Another great example is any Amazon product page. They have the picture of the product,&#xD;
average user rating and price right at the top. The product detail, related products,&#xD;
the actual reviews and all of the rest of the content is below the scroll line. Obviously,&#xD;
it’s successful for them. &#xD;
&lt;/p&gt;&lt;h3&gt;Wrapping up…&#xD;
&lt;/h3&gt;&lt;p&gt;&#xD;
Above the Fold is widely miss-understood. You need to realize that this critical section&#xD;
of the page is not about shoving as much content as you can the user. It’s about effectively&#xD;
giving the “Elevator” pitch on your site and getting that longer look that will likely&#xD;
involve scrolling down to see the real content. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
Guard the above the fold content and keep it to the essential bits that will tell&#xD;
the user what your site is about rather than trying to give them everything in one&#xD;
big drink from the fire hose. Whenever anyone talks to you about moving a certain&#xD;
section of content above the fold, turn the question on them by asking them how that&#xD;
keeps people on the site over all. &#xD;
&lt;/p&gt;&lt;img width="0" height="0" src="http://www.joshholmes.com/blog/aggbug.ashx?id=60aee1ac-72ce-4afa-9908-81b865f6f8ba"&gt;&lt;/img&gt;&lt;br&gt;&lt;hr&gt;&lt;/hr&gt;&#xD;
This weblog is sponsored by &amp;lt;a href="http://www.joshholmes.com"&amp;gt;Josh Holmes&amp;lt;/a&amp;gt;. &#xD;
&lt;/body&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JoshHolmes?a=4YHwXnGmqiQ:Cy2E2GMlpMs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoshHolmes?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoshHolmes?a=4YHwXnGmqiQ:Cy2E2GMlpMs:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoshHolmes?i=4YHwXnGmqiQ:Cy2E2GMlpMs:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoshHolmes?a=4YHwXnGmqiQ:Cy2E2GMlpMs:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoshHolmes?i=4YHwXnGmqiQ:Cy2E2GMlpMs:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoshHolmes?a=4YHwXnGmqiQ:Cy2E2GMlpMs:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoshHolmes?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoshHolmes?a=4YHwXnGmqiQ:Cy2E2GMlpMs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoshHolmes?i=4YHwXnGmqiQ:Cy2E2GMlpMs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JoshHolmes/~4/4YHwXnGmqiQ" height="1" width="1"/&gt;</description><comments>http://www.joshholmes.com/blog/CommentView,guid,60aee1ac-72ce-4afa-9908-81b865f6f8ba.aspx</comments><category>UX</category><category>Web Dev</category><feedburner:origLink>http://www.joshholmes.com/blog/2009/10/09/AboveTheFoldAndHowItReallyShouldBeUsed.aspx</feedburner:origLink></item><item><trackback:ping>http://www.joshholmes.com/blog/Trackback.aspx?guid=d64fbc8e-0926-4dc5-b16d-d2fdf113c84b</trackback:ping><pingback:server>http://www.joshholmes.com/blog/pingback.aspx</pingback:server><pingback:target>http://www.joshholmes.com/blog/PermaLink,guid,d64fbc8e-0926-4dc5-b16d-d2fdf113c84b.aspx</pingback:target><dc:creator>Josh Holmes</dc:creator><wfw:comment>http://www.joshholmes.com/blog/CommentView,guid,d64fbc8e-0926-4dc5-b16d-d2fdf113c84b.aspx</wfw:comment><wfw:commentRss>http://www.joshholmes.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=d64fbc8e-0926-4dc5-b16d-d2fdf113c84b</wfw:commentRss><title>Announcing the WebsiteSpark Program</title><guid isPermaLink="false">http://www.joshholmes.com/blog/PermaLink,guid,d64fbc8e-0926-4dc5-b16d-d2fdf113c84b.aspx</guid><link>http://feedproxy.google.com/~r/JoshHolmes/~3/nZc1fWmNUZQ/AnnouncingTheWebsiteSparkProgram.aspx</link><pubDate>Thu, 24 Sep 2009 16:11:55 GMT</pubDate><description>&lt;body xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;&lt;a href="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/AnnouncingtheWebsiteSparkProgram_82C9/image_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 5px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" align="left" src="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/AnnouncingtheWebsiteSparkProgram_82C9/image_thumb.png" width="161" height="96"&gt;&lt;/img&gt;&lt;/a&gt; Building&#xD;
on the success of the &lt;a href="https://www.dreamspark.com/default.aspx"&gt;DreamSpark&lt;/a&gt; and &lt;a href="http://www.joshholmes.com/blog/2008/11/10/MicrosoftBizSpark.aspx"&gt;BizSpark&lt;/a&gt; program&#xD;
that we launched about 11 months ago Microsoft is now launching the &lt;a href="http://www.microsoft.com/web/websitespark"&gt;WebsiteSpark&lt;/a&gt; program. &#xD;
&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.microsoft.com/web/websitespark/"&gt;WebsiteSpark&lt;/a&gt; is designed&#xD;
for small web consultancies ranging in size from 1 to 10 people. With &lt;a href="http://www.microsoft.com/web/websitespark/"&gt;WebsiteSpark&lt;/a&gt;,&#xD;
you get a package of software specifically selected for a web consultancy to serve&#xD;
their customers better. &#xD;
&lt;/p&gt;&lt;h5&gt;What does the program provide?&#xD;
&lt;/h5&gt;&lt;p&gt;&lt;a href="http://www.microsoft.com/web/websitespark/"&gt;WebSiteSpark&lt;/a&gt; provides software&#xD;
licenses that you can use for three years at no cost.  Once enrolled, you can&#xD;
download and immediately use the following software from Microsoft: &#xD;
&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&#xD;
3 licenses of Visual Studio 2008 Professional Edition &#xD;
&lt;/li&gt;&lt;li&gt;&#xD;
1 license of Expression Studio 3 (which includes Expression Blend, Sketchflow, and&#xD;
Web) &#xD;
&lt;/li&gt;&lt;li&gt;&#xD;
2 licenses of Expression Web 3 &#xD;
&lt;/li&gt;&lt;li&gt;&#xD;
4 processor licenses of Windows Web Server 2008 R2 &#xD;
&lt;/li&gt;&lt;li&gt;&#xD;
4 processor licenses of SQL Server 2008 Web Edition &#xD;
&lt;/li&gt;&lt;li&gt;&#xD;
DotNetPanel control panel (enabling easy remote/hosted management of your servers) &#xD;
&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&#xD;
The Windows Server and SQL Server licenses are for you to do both development and&#xD;
production work. Also, the production licenses can be leveraged in a couple of different&#xD;
ways. You can do 1 production server with 4 processors or 4 servers with 1 processor&#xD;
each. These servers can also be either dedicated hardware or virtualized offerings.&#xD;
If you want, you can throw the licenses on your own server with the “self-hosted”&#xD;
model or you can enroll with one of the hosters that have signed up as a Network Partner.&#xD;
As a Network Partner, they will pass the savings of the licenses on to you and only&#xD;
charge you for the infrastructure work. You can find all of the hosting network partners&#xD;
on the &lt;a href="http://www.microsoft.com/web/websitespark/"&gt;WebsiteSpark&lt;/a&gt; page. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
But this program is not just about software. As part of the &lt;a href="http://www.microsoft.com/web/websitespark/"&gt;WebsiteSpark&lt;/a&gt;,&#xD;
the people that enroll are entered into the &lt;a href="https://partner.microsoft.com/US/30000104?ID=90894078"&gt;Microsoft&#xD;
Partner Program&lt;/a&gt; and into &lt;a href="http://pinpoint.microsoft.com/en-US/"&gt;Microsoft&#xD;
Pinpoint&lt;/a&gt;. This will help result in customer referrals and more. There’s also 2&#xD;
Microsoft professional support incidents per year and some free online training that&#xD;
will be provided.  &#xD;
&lt;/p&gt;&lt;h5&gt;Who’s eligible for BizSpark?&#xD;
&lt;/h5&gt;&lt;p&gt;&lt;a href="http://www.microsoft.com/web/websitespark/"&gt;WebSiteSpark&lt;/a&gt; is available&#xD;
to independent web developers and small web development companies.  The only&#xD;
two requirements to join the program are: &#xD;
&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&#xD;
Your company builds web sites and web application on behalf of others. &#xD;
&lt;/li&gt;&lt;li&gt;&#xD;
Your company currently has less than 10 employees. &#xD;
&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&#xD;
If you qualify and want to get signed up today, there are a couple of different paths. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
You can always visit &lt;a href="http://www.microsoft.com/web/websitespark/"&gt;WebsiteSpark&lt;/a&gt; and&#xD;
sign up directly. During the enrollment, you can pick a network partner or you can&#xD;
pick one of your friends at Microsoft such as me as your contact to enroll and sign&#xD;
you up. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
Or you can send mail to &lt;a href="mailto:webspark@microsoft.com"&gt;webspark@microsoft.com&lt;/a&gt; you&#xD;
can get a referral code quickly.  You can then use that code to enroll in the&#xD;
program on the &lt;a href="http://www.microsoft.com/web/websitespark/"&gt;WebsiteSpark website&lt;/a&gt;. &#xD;
Once enrolled you can immediately download and use the software, as well as begin&#xD;
to participate in the network/partner opportunities. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
If you run into any issues at all, email me at &lt;a href="mailto:josh.holmes@microsoft.com"&gt;josh.holmes@microsoft.com&lt;/a&gt; and&#xD;
I’ll help you out. &#xD;
&lt;/p&gt;&lt;h5&gt;Some quick Q&amp;amp;A&#xD;
&lt;/h5&gt;&lt;ul&gt;&lt;li&gt;&lt;h5&gt;What happens after the 3 years?&#xD;
&lt;/h5&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&#xD;
There is a $100 exit fee when you leave the program whether you leave at the end of&#xD;
1 year or you leverage all three years. However, there’s no obligation to continue&#xD;
using any/all of the software once you exit the program. If you so wish, you can pay&#xD;
the $100 exit fee and wash your hands of the whole deal. Obviously, the play here&#xD;
is that at the end of the three years you will find our platform and tools valuable&#xD;
enough to purchase. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
That said, there are some interesting incentives that are being put in place right&#xD;
now to help you with that decision. WebsiteSpark participants can optionally choose&#xD;
to purchase all of the software in the WebsiteSpark program via a $999/year package.&#xD;
And yes, that includes all of the software involved from the tools to the production&#xD;
licenses.   &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
Or you can just leverage the production licenses through a stellar $199 a year offer&#xD;
that includes both 1 Windows Web Server processor license and 1 SQL Server Web edition&#xD;
processor license.  You can buy the quantity you need of this package at $199/year&#xD;
each.  &#xD;
&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;h5&gt;What’s the role of the Network Partner?&#xD;
&lt;/h5&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;ul&gt;&lt;h5&gt;&lt;/h5&gt;&lt;/ul&gt;&lt;p&gt;&#xD;
Similar to the BizSpark program, the Network Partners are selected because they are&#xD;
active in supporting the ecosystem that the program is intended for. In the case of&#xD;
hosters it’s obvious. They host the websites that WebsiteSpark participants are building.&#xD;
There are others who work with the community in advisory roles and want to help out&#xD;
as mentors and coaches. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
Couple of examples:&#xD;
&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.calevans.com"&gt;Cal Evans&lt;/a&gt; is another example of a great network&#xD;
partner as he’s working with PHP shops all over the world and helping them to be successful&#xD;
again as a mentor and as a coach. As a network partner, he is adding one more offering&#xD;
into the portfolio to help his mentees be successful. &#xD;
&lt;/p&gt;&lt;p&gt;&lt;a href="http://stevesmithblog.com/"&gt;Steve Smith&lt;/a&gt; from &lt;a href="http://NimblePros.com"&gt;Nimble&#xD;
Pros&lt;/a&gt; who wanted to be involved as a network partner because he’s active in working&#xD;
with other consults to help them be successful through support, advice, mentoring&#xD;
and sometimes sub-contracting. He’s proven this by being a Microsoft Regional Director&#xD;
and an MVP for many years. His role as a network partner in the program only furthers&#xD;
that goal of helping the ecosystem. &#xD;
&lt;/p&gt;&lt;p&gt;&lt;a href="http://twitter.com/ben_henderson"&gt;Ben Henderson&lt;/a&gt; from &lt;a href="http://www.fireflylogic.com"&gt;Firefly&#xD;
Logic&lt;/a&gt;, &lt;a href="http://www.harperreed.org/"&gt;Harper Reed&lt;/a&gt; from &lt;a href="http://www.threadless.com/"&gt;Threadless&lt;/a&gt; and &lt;a href="http://geekswithblogs.net/jalexander/"&gt;John&#xD;
Alexander&lt;/a&gt; and &lt;a href="http://geekswithblogs.net/jjulian/"&gt;Jeff Julian&lt;/a&gt; from &lt;a href="http://www.geekswithblogs.net/"&gt;Geeks&#xD;
With Blogs&lt;/a&gt; hold similar positions in the community as influential bloggers, coaches,&#xD;
mentors and advisors to many companies. &#xD;
&lt;/p&gt;&lt;h5&gt;Summary&#xD;
&lt;/h5&gt;&lt;p&gt;&#xD;
I’m really excited about &lt;a href="http://www.microsoft.com/web/websitespark/"&gt;WebsiteSpark&lt;/a&gt; because&#xD;
I remember when I was an independent consultant and then a partner at &lt;a href="http://www.srtsolutions.com"&gt;SRT&#xD;
Solutions&lt;/a&gt; getting our first dedicated server. It was a great feeling to have the&#xD;
freedom to do whatever we needed to do with the server from installing different types&#xD;
of software to configuring the redirects the way we wanted. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
For more details – read Scott Guthrie's blog post at &lt;a href="http://weblogs.asp.net/scottgu/archive/2009/09/24/announcing-the-websitespark-program.aspx"&gt;Announcing&#xD;
the WebsiteSpark Program - ScottGu's Blog&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&#xD;
Again, if you want to get involved, feel free to contact me at &lt;a href="mailto:josh.holmes@microsoft.com"&gt;josh.holmes@microsoft.com&lt;/a&gt;.&#xD;
Either I can sign you up directly or get you in touch with the right network partner&#xD;
to help you in your situation. &lt;img width="0" height="0" src="http://www.joshholmes.com/blog/aggbug.ashx?id=d64fbc8e-0926-4dc5-b16d-d2fdf113c84b"&gt;&lt;/img&gt;&lt;br&gt;&lt;hr&gt;&lt;/hr&gt;&#xD;
This weblog is sponsored by &amp;lt;a href="http://www.joshholmes.com"&amp;gt;Josh Holmes&amp;lt;/a&amp;gt;. &#xD;
&lt;/p&gt;&lt;/body&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JoshHolmes?a=nZc1fWmNUZQ:O877Xk8HrC0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoshHolmes?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoshHolmes?a=nZc1fWmNUZQ:O877Xk8HrC0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoshHolmes?i=nZc1fWmNUZQ:O877Xk8HrC0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoshHolmes?a=nZc1fWmNUZQ:O877Xk8HrC0:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoshHolmes?i=nZc1fWmNUZQ:O877Xk8HrC0:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoshHolmes?a=nZc1fWmNUZQ:O877Xk8HrC0:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoshHolmes?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoshHolmes?a=nZc1fWmNUZQ:O877Xk8HrC0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoshHolmes?i=nZc1fWmNUZQ:O877Xk8HrC0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JoshHolmes/~4/nZc1fWmNUZQ" height="1" width="1"/&gt;</description><comments>http://www.joshholmes.com/blog/CommentView,guid,d64fbc8e-0926-4dc5-b16d-d2fdf113c84b.aspx</comments><feedburner:origLink>http://www.joshholmes.com/blog/2009/09/24/AnnouncingTheWebsiteSparkProgram.aspx</feedburner:origLink></item><item><trackback:ping>http://www.joshholmes.com/blog/Trackback.aspx?guid=fc37f397-5f18-4854-b48a-6c81eb2576f3</trackback:ping><pingback:server>http://www.joshholmes.com/blog/pingback.aspx</pingback:server><pingback:target>http://www.joshholmes.com/blog/PermaLink,guid,fc37f397-5f18-4854-b48a-6c81eb2576f3.aspx</pingback:target><dc:creator>Josh Holmes</dc:creator><wfw:comment>http://www.joshholmes.com/blog/CommentView,guid,fc37f397-5f18-4854-b48a-6c81eb2576f3.aspx</wfw:comment><wfw:commentRss>http://www.joshholmes.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=fc37f397-5f18-4854-b48a-6c81eb2576f3</wfw:commentRss><slash:comments>1</slash:comments><title>Vote for the SxSW Panels!</title><guid isPermaLink="false">http://www.joshholmes.com/blog/PermaLink,guid,fc37f397-5f18-4854-b48a-6c81eb2576f3.aspx</guid><link>http://feedproxy.google.com/~r/JoshHolmes/~3/HCSwID5KZ_o/VoteForTheSxSWPanels.aspx</link><pubDate>Wed, 19 Aug 2009 23:50:36 GMT</pubDate><description>&lt;body xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;&lt;img style="margin: 0px 5px 5px; display: inline" alt="panelpicker-formula.gif" align="left" src="http://www.sxsw.com/sites/2010.sxsw.com/files/u13/panelpicker-formula.gif" width="182" height="251"&gt;&lt;/img&gt;One&#xD;
of the many things that I love about SxSW is that they let the attendees vote for&#xD;
the sessions that they want to see. They are also very realistic that the attendees&#xD;
are not picking the sessions, but they do count for 30% of the vote. Their whole process&#xD;
is laid out on the main page at &lt;a title="http://panelpicker.sxsw.com/" href="http://panelpicker.sxsw.com/"&gt;http://panelpicker.sxsw.com/&lt;/a&gt;.&#xD;
It’s 30% attendee votes, 30% staff and 40% advisory board. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
The reason that I’m bringing this is that I’ve submitted some sessions this year for&#xD;
SxSW and I need your votes. Typically I don’t do this blatant of a self promotion&#xD;
and/or plea for help but I’m up against some of the best social marketers in the business.&#xD;
:)&#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
Specifically, I’ve got two that are up for votes right now. &#xD;
&lt;/p&gt;&lt;p&gt;&lt;a href="http://sn.im/jhsxswr"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 0px 5px 5px; display: inline; border-top: 0px; border-right: 0px" title="clip_image002" border="0" alt="clip_image002" align="left" src="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/VotefortheSxSWPanels_1105E/clip_image002_3.jpg" width="68" height="68"&gt;&lt;/img&gt;&lt;/a&gt;The&#xD;
first one is a joint session with &lt;a href="http://www.jamesward.com"&gt;James Ward&lt;/a&gt; who&#xD;
is one of the technical evangelists from Adobe. He and I are talking about the best&#xD;
and worst practices that we see at our clients every single day. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
Title: &lt;a href="http://sn.im/jhsxswr"&gt;Best and Worst Practices Building Rich Internet&#xD;
App&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&#xD;
Description: &#xD;
&lt;br&gt;&#xD;
Seen a good RIA lately? A bad one? Because RIAs provide a similar user experience&#xD;
to desktop applications (with the ease of a web/browser-based deployment), confusion&#xD;
results from potentially conflicting practices depending on whether one approaches&#xD;
the RIA as a desktop or a web application. Let’s stop the madness.&#xD;
&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&#xD;
Questions: &#xD;
&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;div align="left"&gt;What is RIA? &#xD;
&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&#xD;
What technologies are considered RIA technologies? &#xD;
&lt;/li&gt;&lt;li&gt;&#xD;
When should you use RIA? &#xD;
&lt;/li&gt;&lt;li&gt;&#xD;
When should you not use RIA? &#xD;
&lt;/li&gt;&lt;li&gt;&#xD;
What's the learning curve for desktop developers to jump into RIA? &#xD;
&lt;/li&gt;&lt;li&gt;&#xD;
What's the learning curve for web developers to jump into RIA? &#xD;
&lt;/li&gt;&lt;li&gt;&#xD;
What are the best practices for RIAs? &#xD;
&lt;/li&gt;&lt;li&gt;&#xD;
What are the worst practices for RIA? &#xD;
&lt;/li&gt;&lt;li&gt;&#xD;
How does one deal with multiple form factors? &#xD;
&lt;/li&gt;&lt;li&gt;&#xD;
What's the best architectural guidance for a RIA? &#xD;
&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;a href="http://sn.im/jhsxswa"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 0px 5px 5px; display: inline; border-top: 0px; border-right: 0px" title="clip_image002" border="0" alt="clip_image002" align="left" src="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/VotefortheSxSWPanels_1105E/clip_image002_3.jpg" width="68" height="68"&gt;&lt;/img&gt;&lt;/a&gt;The&#xD;
second session that I submitted is a joint session with &lt;a href="http://www.wjgilmore.com/"&gt;Jason&#xD;
Gilmore&lt;/a&gt;, resident PHP Guru and consultant. He and I are talking about intelligently&#xD;
scaling your applications through cloud computing and our lessons learned actually&#xD;
doing just that. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
Title: &lt;a href="http://sn.im/jhsxswa"&gt;You Build It, They Come, Your App Scales&lt;/a&gt;&lt;/p&gt;&lt;dt&gt;&lt;dt&gt;&lt;p&gt;&lt;/p&gt;&lt;dt&gt;Description: &#xD;
&lt;br&gt;&#xD;
A startup’s biggest hopes - and fears – are hitting it big, and having to scale to&#xD;
100,000 users overnight. See how PHP combined with Cloud computing provides the best&#xD;
of both worlds - low entry barriers, low startup costs and the ability to scale rapidly&#xD;
to meet demands.&lt;/dt&gt;&lt;/dt&gt;&lt;/dt&gt;&lt;dt&gt;  &lt;dt&gt;Questions: &lt;/dt&gt;&lt;ol&gt;&lt;li&gt;&#xD;
What is Scale? &#xD;
&lt;/li&gt;&lt;li&gt;&#xD;
What's the difference between Scale and Performance? &#xD;
&lt;/li&gt;&lt;li&gt;&#xD;
What are the ways to scale an application? &#xD;
&lt;/li&gt;&lt;li&gt;&#xD;
How do you determine what scale you need? &#xD;
&lt;/li&gt;&lt;li&gt;&#xD;
What is cloud computing? &#xD;
&lt;/li&gt;&lt;li&gt;&#xD;
What is Azure? &#xD;
&lt;/li&gt;&lt;li&gt;&#xD;
How well does PHP work on Azure? &#xD;
&lt;/li&gt;&lt;li&gt;&#xD;
What considerations are needed to run on Azure? &#xD;
&lt;/li&gt;&lt;li&gt;&#xD;
How do you geo-locate an application? &#xD;
&lt;/li&gt;&lt;li&gt;&#xD;
How hard is it to get started with cloud computing? &#xD;
&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&#xD;
I need your help getting the word out and the votes flowing. Please tweet about the&#xD;
sessions and/or this post and drive some awareness of my sessions! :)&#xD;
&lt;/p&gt;&lt;img width="0" height="0" src="http://www.joshholmes.com/blog/aggbug.ashx?id=fc37f397-5f18-4854-b48a-6c81eb2576f3"&gt;&lt;/img&gt;&lt;br&gt;&lt;hr&gt;&lt;/hr&gt;&#xD;
This weblog is sponsored by &amp;lt;a href="http://www.joshholmes.com"&amp;gt;Josh Holmes&amp;lt;/a&amp;gt;. &#xD;
&lt;/dt&gt;&lt;/body&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JoshHolmes?a=HCSwID5KZ_o:puDNrU9347A:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoshHolmes?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoshHolmes?a=HCSwID5KZ_o:puDNrU9347A:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoshHolmes?i=HCSwID5KZ_o:puDNrU9347A:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoshHolmes?a=HCSwID5KZ_o:puDNrU9347A:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoshHolmes?i=HCSwID5KZ_o:puDNrU9347A:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoshHolmes?a=HCSwID5KZ_o:puDNrU9347A:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoshHolmes?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoshHolmes?a=HCSwID5KZ_o:puDNrU9347A:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoshHolmes?i=HCSwID5KZ_o:puDNrU9347A:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JoshHolmes/~4/HCSwID5KZ_o" height="1" width="1"/&gt;</description><comments>http://www.joshholmes.com/blog/CommentView,guid,fc37f397-5f18-4854-b48a-6c81eb2576f3.aspx</comments><feedburner:origLink>http://www.joshholmes.com/blog/2009/08/19/VoteForTheSxSWPanels.aspx</feedburner:origLink></item><item><trackback:ping>http://www.joshholmes.com/blog/Trackback.aspx?guid=3957ec53-12d6-48f4-a662-42c9b0fa4960</trackback:ping><pingback:server>http://www.joshholmes.com/blog/pingback.aspx</pingback:server><pingback:target>http://www.joshholmes.com/blog/PermaLink,guid,3957ec53-12d6-48f4-a662-42c9b0fa4960.aspx</pingback:target><dc:creator>Josh Holmes</dc:creator><wfw:comment>http://www.joshholmes.com/blog/CommentView,guid,3957ec53-12d6-48f4-a662-42c9b0fa4960.aspx</wfw:comment><wfw:commentRss>http://www.joshholmes.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=3957ec53-12d6-48f4-a662-42c9b0fa4960</wfw:commentRss><slash:comments>1</slash:comments><title>eRubycon 2009 Day 3</title><guid isPermaLink="false">http://www.joshholmes.com/blog/PermaLink,guid,3957ec53-12d6-48f4-a662-42c9b0fa4960.aspx</guid><link>http://feedproxy.google.com/~r/JoshHolmes/~3/4ZyrGJtfq7Q/eRubycon2009Day3.aspx</link><pubDate>Mon, 10 Aug 2009 23:46:42 GMT</pubDate><description>&lt;body xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;h3&gt;Putting the "FUN" back in functional programming (or at least taking the "FU"&#xD;
out of it)&#xD;
&lt;/h3&gt;&lt;p&gt;&lt;a href="http://www.evilmartini.com/"&gt;&lt;a title="Randall Thomas - Erubycon 2009 - Day 3" href="http://www.flickr.com/photos/40542539@N00/3804654703/"&gt;&lt;img class="flickr" border="0" hspace="5" alt="Randall Thomas - Erubycon 2009 - Day 3" vspace="5" align="left" src="http://static.flickr.com/3531/3804654703_d437e3cd72_m.jpg"&gt;&lt;/img&gt;&lt;/a&gt;Randall&#xD;
Thomas&lt;/a&gt; kicked off the morning with a talk on Functional Programming. I have seen&#xD;
a number of talks on functional programming but was really looking forward to Randall’s&#xD;
take on it as he’s not only smart but he’s really entertaining. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
The basis for functional programming was that there were a group of guys that were&#xD;
trying to figure out how to mathematically prove that an application was correct.&#xD;
This had strong basis in lambda calculus. The interesting idea here is that since&#xD;
the program can be mathematically proven, you can do things in a almost any order&#xD;
and it will still work. This means that you can &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
This is a big deal with systems that deal with concurrency. The reality is that any&#xD;
web application has to deal with concurrency. 3D video games deal with concurrency.&#xD;
Distributed computing, cloud computing and many of the things that we are doing on&#xD;
a daily basis have to deal with concurrency. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
FU(Thinking) is when you start thinking functionally and solve a given problem in&#xD;
different way than you would have in the OO world. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
Recursion is an example of this. Everyone has had to written and messed up a recursive&#xD;
function. The example that he used was calculating a Fibonacci sequence. In straight&#xD;
Ruby, the demonstration was 10-15 lines of code with a while loop, counters that were&#xD;
incremented and decremented and so on. The functional version of that was 4 lines&#xD;
with no looping, &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
I loved his quote “Amateurs copy, professionals steal” as he put up a demo that he&#xD;
borrowed from someone.&#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
Honestly, he lost me a little on the deltas between procs and lamdas in Ruby. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
He brought up the topic of Monads. When he asked the crowd who understood Monads and&#xD;
Jim Weirich didn’t raise his hand, I knew that we were in trouble. Then Randall admitted&#xD;
that he didn’t fully get Monads either. At that point, I knew that I wouldn’t get&#xD;
it probably ever. But he went on to say that mostly people talk about Monads in context&#xD;
of the obfuscated code contests and the like. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
List processing is at the core of the things that we do on a day to day basis. There&#xD;
are three things that we do to lists every day. &#xD;
&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&#xD;
Transform everything &#xD;
&lt;/li&gt;&lt;li&gt;&#xD;
Extract everything &#xD;
&lt;/li&gt;&lt;li&gt;&#xD;
Combining (everything or something)&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&#xD;
Functional programming is really good at list processing. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
“iteration is the life blood of ruby – and now a word from some bad ass functional&#xD;
code.”&#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
#Ruby magic – f(x) style&lt;br&gt;&#xD;
(1..10).reject{ |x| 0 == x%2 }.map.join(‘,’)&#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
So what does that do? It prints out all of the odd numbers from 1 to 10. Notice that&#xD;
there’s no initialization, no main and so on. This is at the core of why people love&#xD;
Ruby. It’s an extremely expressive language. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
I was partially nervous that this talk was going to be a pitch for a “Functional”&#xD;
language such as Haskell, Scala, F# or Clojure. But it wasn’t. It was explaining functional&#xD;
programming and help us bend our head around thinking like a functional programmer&#xD;
but accomplish what we need to do *most* of the time in Ruby. &#xD;
&lt;/p&gt;&lt;h3&gt;Modeling Workflow Concepts in Ruby or (almost) Everything I Needed to Know about&#xD;
Workflow I learned from Schoolhouse Rock.&#xD;
&lt;/h3&gt;&lt;p&gt;&lt;a href="http://www.CodeSherpas.com"&gt;&lt;a title="David Bock - Erubycon 2009 - Day 3" href="http://www.flickr.com/photos/40542539@N00/3804659111/"&gt;&lt;img class="flickr" border="0" hspace="5" alt="David Bock - Erubycon 2009 - Day 3" vspace="5" align="left" src="http://static.flickr.com/2470/3804659111_2f3f3e3243_m.jpg"&gt;&lt;/img&gt;&lt;/a&gt;David&#xD;
Bock&lt;/a&gt; is a workflow consultant. He’s a great speaker and just a fun guy to hang&#xD;
out with. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
State-Based verses Process-Based workflows is one of the core concerns in workflow&#xD;
camps. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
State-based workflow – this is the thing that reminded David of Schoolhouse Rock.&#xD;
He was thinking about the example of getting a bill passed (&lt;a title="http://www.schoolhouserock.tv/Bill.html" href="http://www.schoolhouserock.tv/Bill.html"&gt;http://www.schoolhouserock.tv/Bill.html&lt;/a&gt;).&#xD;
There are a lot of different states that a specific bill can be in at any given time.&#xD;
But how things progress from one state to another is the interesting bits. The states&#xD;
are just the points that you would tell your boss if he asked you how things are going.&#xD;
It’s been “Submitted”, it’s “In progress”, it’s “On order”, it’s “Completed”. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
To implement a State based workflow, you can do it easily in Rails. David is also&#xD;
working on a project called “&lt;a href="http://github.com/bokmann/Stone-Path/tree/master"&gt;Stone&#xD;
Path&lt;/a&gt;”&#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
Process-based workflow flips things on it’s head compared to the state based workflow.&#xD;
Or as David said, Process based workflow says that Schoolhouse Rocks was wrong. The&#xD;
state is not what’s an issue, what matters is who does it and how it’s done. This&#xD;
deals with what things can be done in parallel and more. These are things that state&#xD;
based models don’t deal with. There’s a fair amount more handholding and strictness&#xD;
to a process-based workflow engine as it really deals with the “How” of what you are&#xD;
doing, not just the end results. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
There’s a project that deals with it well called &lt;a href="http://openwferu.rubyforge.org/"&gt;Ruote&lt;/a&gt;.&#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
If you users are novices, you need to choose process-based workflow. This will give&#xD;
them a lot more handholding and rules that they will have to follow. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
If you users are experts, you need to choose the state based work flow. This will&#xD;
give them the freedom to skip around, push the boundaries, take shortcuts and anything&#xD;
it takes to get from one state to the next. This can be a good and a bad thing. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
"Workflow” is not a tool, it’s a bunch of domain concepts that you can apply and implement&#xD;
yourself. &#xD;
&lt;/p&gt;&lt;h3&gt;Playing Nice With Others&#xD;
&lt;/h3&gt;&lt;p&gt;&lt;a href="http://copiousfreetime.org/"&gt;&lt;a title="Jeremy Hinegardner - Erubycon 2009 - Day 3" href="http://www.flickr.com/photos/40542539@N00/3804669585/"&gt;&lt;img class="flickr" border="0" hspace="5" alt="Jeremy Hinegardner - Erubycon 2009 - Day 3" vspace="5" align="left" src="http://static.flickr.com/3582/3804669585_8ec6e13b15_m.jpg"&gt;&lt;/img&gt;&lt;/a&gt;Jeremy&#xD;
Hinegardner&lt;/a&gt; did this talk about playing nice with other languages and data stores&#xD;
and the like. He talked about the idea that there are three types of persistence that&#xD;
are out there. None, Snapshot and Lifetime. There are times that we need one verses&#xD;
the other &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
Then he talked about a number of different tools that accomplish various bits along&#xD;
the path there. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
Memcache – This is a memory based object caching scheme that is used heavily in a&#xD;
number of different languages including Ruby, Python and PHP. &#xD;
&lt;/p&gt;&lt;p&gt;&lt;a href="http://tokyocabinet.sourceforge.net/"&gt;Tokyo Cabinet&lt;/a&gt; – This is a set of&#xD;
libraries that cover a fair amount of ground. They can fit in either the Zero or Lifetime&#xD;
persistence. &#xD;
&lt;/p&gt;&lt;p&gt;&lt;a href="http://code.google.com/p/redis/"&gt;Redis&lt;/a&gt; - “Redis is a key-value database.&#xD;
It is similar to memcached but the dataset is not volatile, and values can be strings,&#xD;
exactly like in memcached, but also lists and sets with atomic operations to push/pop&#xD;
elements.” – from the Redis home page. &#xD;
&lt;/p&gt;&lt;p&gt;&lt;a href="http://xph.us/software/beanstalkd/"&gt;Beanstalk&lt;/a&gt; – This is fast, distributed,&#xD;
in-memory work-queue service. &#xD;
&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.zeromq.org/"&gt;ZeroMQ&lt;/a&gt; – This is a memory based messaging system. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
The most interesting part of the presentation to me was when Jeremy started showing&#xD;
how understanding what your persistence needs were and how that helped you make your&#xD;
decisions on which of the frameworks to pull down. For example, if you need Lifetime&#xD;
persistence, you should look at Tokyo Cabinet and so on. &#xD;
&lt;/p&gt;&lt;h3&gt;Building Native Mobile Apps in Rhode&#xD;
&lt;/h3&gt;&lt;p&gt;&lt;a title="Adam Blum - Erubycon 2009 - Day 3" href="http://www.flickr.com/photos/40542539@N00/3805494078/"&gt;&lt;img class="flickr" border="0" hspace="5" alt="Adam Blum - Erubycon 2009 - Day 3" vspace="5" align="left" src="http://static.flickr.com/3443/3805494078_7ef0565c5c_m.jpg"&gt;&lt;/img&gt;&lt;/a&gt;The&#xD;
last talk of eRubycon was done by &lt;a href="http://www.adamblum.com/"&gt;Adam Blum&lt;/a&gt; on&#xD;
writing mobile applications. The Rhodes framework is an application framework that&#xD;
all allows you to build applications in HTML and Ruby and deploy that application&#xD;
to iPhone, Windows Mobile, BlackBerry, Android and Symbian. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
Their tag line is “The Open Mobile Framework”. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
The architecture is that they built a small web server and Ruby implementation for&#xD;
each of the platforms. The framework actually loads up the HTML/CSS from the small&#xD;
web server and runs it in the local device’s browser control. I asked him if they&#xD;
ship a browser control or not and he said that they haven’t had to. Specifically he&#xD;
talked about the fact that Blackberry is actually the hardest to work with. They were&#xD;
surprised by the Windows Mobile browser. In their experience, as a browser is not&#xD;
fantastic compared to Webkit based browsers but as a browser control it’s actually&#xD;
very light and works well. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
They have a public beta of &lt;a href="http://rhohub.com"&gt;RhoHub&lt;/a&gt; which is a deployment&#xD;
as a service for mobile. &#xD;
&lt;/p&gt;&lt;img width="0" height="0" src="http://www.joshholmes.com/blog/aggbug.ashx?id=3957ec53-12d6-48f4-a662-42c9b0fa4960"&gt;&lt;/img&gt;&lt;br&gt;&lt;hr&gt;&lt;/hr&gt;&#xD;
This weblog is sponsored by &amp;lt;a href="http://www.joshholmes.com"&amp;gt;Josh Holmes&amp;lt;/a&amp;gt;. &#xD;
&lt;/body&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JoshHolmes?a=4ZyrGJtfq7Q:zD9v5uIc8VA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoshHolmes?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoshHolmes?a=4ZyrGJtfq7Q:zD9v5uIc8VA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoshHolmes?i=4ZyrGJtfq7Q:zD9v5uIc8VA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoshHolmes?a=4ZyrGJtfq7Q:zD9v5uIc8VA:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoshHolmes?i=4ZyrGJtfq7Q:zD9v5uIc8VA:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoshHolmes?a=4ZyrGJtfq7Q:zD9v5uIc8VA:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoshHolmes?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoshHolmes?a=4ZyrGJtfq7Q:zD9v5uIc8VA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoshHolmes?i=4ZyrGJtfq7Q:zD9v5uIc8VA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JoshHolmes/~4/4ZyrGJtfq7Q" height="1" width="1"/&gt;</description><comments>http://www.joshholmes.com/blog/CommentView,guid,3957ec53-12d6-48f4-a662-42c9b0fa4960.aspx</comments><feedburner:origLink>http://www.joshholmes.com/blog/2009/08/10/eRubycon2009Day3.aspx</feedburner:origLink></item><item><trackback:ping>http://www.joshholmes.com/blog/Trackback.aspx?guid=295d25ee-b687-40b9-ba72-efae2290f2bb</trackback:ping><pingback:server>http://www.joshholmes.com/blog/pingback.aspx</pingback:server><pingback:target>http://www.joshholmes.com/blog/PermaLink,guid,295d25ee-b687-40b9-ba72-efae2290f2bb.aspx</pingback:target><dc:creator>Josh Holmes</dc:creator><wfw:comment>http://www.joshholmes.com/blog/CommentView,guid,295d25ee-b687-40b9-ba72-efae2290f2bb.aspx</wfw:comment><wfw:commentRss>http://www.joshholmes.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=295d25ee-b687-40b9-ba72-efae2290f2bb</wfw:commentRss><slash:comments>2</slash:comments><title>eRubycon 2009 Day 2</title><guid isPermaLink="false">http://www.joshholmes.com/blog/PermaLink,guid,295d25ee-b687-40b9-ba72-efae2290f2bb.aspx</guid><link>http://feedproxy.google.com/~r/JoshHolmes/~3/JgQvIhmngoo/eRubycon2009Day2.aspx</link><pubDate>Sat, 08 Aug 2009 21:34:01 GMT</pubDate><description>&lt;body xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;h3&gt;Leadership 101&#xD;
&lt;/h3&gt;&lt;p&gt;&lt;a href="http://frazzleddad.com"&gt;&lt;a title="Jim Holmes - Erubycon 2009 - Day 2" href="http://www.flickr.com/photos/40542539@N00/3802713138/"&gt;&lt;img style="display: inline; margin-left: 0px; margin-right: 0px" class="flickr" border="0" hspace="5" alt="Jim Holmes - Erubycon 2009 - Day 2" vspace="5" align="left" src="http://static.flickr.com/3463/3802713138_b3fd14c295_m.jpg"&gt;&lt;/img&gt;&lt;/a&gt;Jim&#xD;
Holmes&lt;/a&gt; kicked off day two with a talk called Leadership 101. This is an amazing&#xD;
talk. Jim, as humble as he tries to be about it, is an amazing leader. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
He has posted his slides at &lt;a href="http://is.gd/2avEy"&gt;http://is.gd/2avEy&lt;/a&gt;. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
He started off the talk with a story about World War 1 and a story about trench warfare.&#xD;
I knew but it didn’t really hit home that the phrase “Over the top” started in trench&#xD;
warfare. In trench warfare, the troops dig in and build trenches that they basically&#xD;
live in except for when they are on the assault. The phrase “Over the top” referred&#xD;
to leaving that safety and crossing no man’s land, the area between the two armies&#xD;
where you were in the direct line of fire, and going to attack the enemy. This was&#xD;
not a safe thing to ask people to do. But the “brass”, was not on the ground in the&#xD;
trenches. They were miles and miles away in relative safety. In 1912 in France, there&#xD;
was a huge miss that was caused by this separation. They missed the fact that it had&#xD;
been raining for weeks and that the trenches had flooded, the river had flooded, the&#xD;
fields were swamps and there was no way to move quickly. It was suicide to go over&#xD;
the top. But they didn’t know that so they kept sending people over the top and ended&#xD;
up loosing 500,000 men. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
The next thing that he talked about is that we, as technologists, need to grow. We&#xD;
are passionate about what we do and take pride in the technology that we implement.&#xD;
But we need to understand business value and how that relates to what we are doing.&#xD;
When we talk to the business owners, we need to express ourselves in terms that they&#xD;
understand. “The business does care, they just speak a different language than we&#xD;
do”. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
The next step is to mentor. Take on mentors. Mentor others. But as you are entering&#xD;
these mentoring relationships, you have to be an active participant in the relationship.&#xD;
As one of his early mentors said “You are not a teacup and I am not a teapot and I&#xD;
can’t just poor information into you. You have to be an active participant in this&#xD;
relationship”. Mentoring is a two way street. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
Another thing that he talked about is the idea of smart mistakes verses dumb mistakes.&#xD;
If you make a smart mistake, there shouldn’t be any negative consequences for smart&#xD;
mistakes. These are ones where you do the due diligence and make a decision after&#xD;
some thought and it turns out to be the wrong decision. That’s fine. The dumb mistakes&#xD;
are the ones where you make rash decisions without understanding or thinking about&#xD;
the consequences of the decision. These should have consequences. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
In order to be a great leader, you have to have the respect of your team, peers, clients&#xD;
and more. But how do you get that respect? “You don’t get respect unless you give&#xD;
respect. You can’t demand respect back. You earn that respect”. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
“It’s not just enough for you to be successful. Those around you, below you and behind&#xD;
you have to be successful too. Leading from the rear has never been successful.”&#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
Jim did an amazing talk and really opened my eyes in a number of ways. &#xD;
&lt;/p&gt;&lt;h3&gt;Your Rails are Rusty&#xD;
&lt;/h3&gt;&lt;p&gt;&lt;a href="http://twitter.com/adamlogic"&gt;&lt;a title="Adam McCrea - Erubycon 2009 - Day 2" href="http://www.flickr.com/photos/40542539@N00/3802727662/"&gt;&lt;img class="flickr" border="0" hspace="5" alt="Adam McCrea - Erubycon 2009 - Day 2" vspace="5" align="left" src="http://static.flickr.com/3590/3802727662_05fa729a80_m.jpg"&gt;&lt;/img&gt;&lt;/a&gt;Adam&#xD;
McCrea&lt;/a&gt; from &lt;a href="http://edgecase.com"&gt;EdgeCase&lt;/a&gt; did a talk next about doing&#xD;
Rails development and productivity. He started off the session talking about a project&#xD;
recently where they got started and it took them several iterations to get to a productive&#xD;
state. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
The basic problem that he started off is that when he started Rails development, he&#xD;
accepted all of the defaults and was very successful. But over time he kept changing&#xD;
this default or that default and trying new plug ins. Each time he tried a new plugin,&#xD;
he added possible complexity and startup time. He advocates “minimizing decisions&#xD;
- automating as much as possible”. This is the core thesis of the talk. I whole heartedly&#xD;
agree. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
“If you’re learning too many new things at once on a project, something has to go&#xD;
if you hope for success” – Joe Fiorini on  Twitter&#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
Adam laid out a number of really good guidelines in his talk. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
“Your needs may be more complicated than this, but don’t assume that they are”. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
“If you don’t understand the source” of a given plugin, then you should run away.&#xD;
This is a great tip. You can blackbox Rails to a degree but it’s really hard to do&#xD;
that with a given plugin. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
One of the things that I really liked that he talks about is that you should pick&#xD;
a default UI for all of your projects that you don’t have a designer to work with&#xD;
on. &#xD;
&lt;/p&gt;&lt;h3&gt;Be Careful, Your Java is Showing&#xD;
&lt;/h3&gt;&lt;p&gt;&lt;a title="Joe O'Brien - Erubycon 2009 - Day 2" href="http://www.flickr.com/photos/40542539@N00/3801921207/"&gt;&lt;img class="flickr" border="0" hspace="5" alt="Joe O'Brien - Erubycon 2009 - Day 2" vspace="5" align="left" src="http://static.flickr.com/3476/3801921207_f9845fefe9_m.jpg"&gt;&lt;/img&gt;&lt;/a&gt;Joe&#xD;
O’Brien did a great talk next on developing Ruby as Ruby, not as Java, C#, C++ or&#xD;
whatever language you did last in Ruby syntax. There are some core changes in the&#xD;
mindset that you have to put yourself in to be truly successful. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
Unfortunately, I was panicking over my upcoming talk a little so didn’t get to listen&#xD;
to him in great detail. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
If someone wants to email me or put a summation in the comments section, I’d happily&#xD;
put it inline here and give them credit. &#xD;
&lt;/p&gt;&lt;h3&gt;Enterprise Java&#xD;
&lt;/h3&gt;&lt;p&gt;&lt;a title="Charles Nutter - Erubycon 2009 - Day 2" href="http://www.flickr.com/photos/40542539@N00/3802755854/"&gt;&lt;img class="flickr" border="0" hspace="5" alt="Charles Nutter - Erubycon 2009 - Day 2" vspace="5" align="left" src="http://static.flickr.com/2624/3802755854_d6207c3681_m.jpg"&gt;&lt;/img&gt;&lt;/a&gt;Charles&#xD;
Nutter was the talk right before me. As I was still building some of the demos and&#xD;
getting ready for my talk, I was not able to really get a lot of notes down. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
JRuby is in version 1.3. They are rolling along pretty quickly. They are fully 1.8.6&#xD;
compliant and are most of the way to 1.9. One interesting thing that he pointed out&#xD;
is that you can have 1.8.6 and 1.9 in a single binary. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
He showed GlassFish running on JRuby. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
He showed running JRuby on the Google Android device. This got a few good oohs and&#xD;
ahhs. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
I really wish that I had been in a better spot with my talk to take more notes. Again,&#xD;
if you’ve got a good summation, please help me get that up here. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
*Update* – my plea for a summary were answered by &lt;a href="http://gayleforce.wordpress.com/"&gt;Gayle&#xD;
Craig&lt;/a&gt;, aha &lt;a href="http://twitter.com/gayleforce"&gt;@gayleforce&lt;/a&gt;. &#xD;
&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&#xD;
"Charles observed that when Ruby first gained it's popularity, many Ruby developers&#xD;
were coming over from the Java world.  And now, some of those folks are going&#xD;
back to Java because their companies are not moving away from the Java platform, and&#xD;
because of the maturity and availability of tools that may not have been written yet&#xD;
in Ruby but are already available in Java.  If the rubyists embrace this, and&#xD;
work to find ways to build bridges between Ruby and Java, then that will continue&#xD;
to entice more Java developers over to Ruby instead of abandoning Ruby.  And&#xD;
that's good for the Ruby community.  And that's what JRuby is working to do. &#xD;
Charles demonstrated some things in JRuby like ruby2java (a Ruby to Java compiler),&#xD;
become_java, and Jibernate (Hibernate through JRuby.) Charles highly encouraged developers&#xD;
in the room to contribute to JRuby, as there's only a few of them working on JRuby&#xD;
and there's plenty to do…"&#xD;
&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&#xD;
Thanks Gayle!&#xD;
&lt;/p&gt;&lt;h3&gt;IronRuby&#xD;
&lt;/h3&gt;&lt;p&gt;&lt;a title="Josh Holmes - Erubycon 2009 - Day 2" href="http://www.flickr.com/photos/40542539@N00/3801953073/"&gt;&lt;img class="flickr" border="0" hspace="5" alt="Josh Holmes - Erubycon 2009 - Day 2" vspace="5" align="left" src="http://static.flickr.com/3550/3801953073_26cb3d66e6_m.jpg"&gt;&lt;/img&gt;&lt;/a&gt;I&#xD;
did the next talk on IronRuby. Largely, I did Jimmy Schementi’s talk from Oscon with&#xD;
my own twist. He posted his speaking notes at &lt;a title="jimmy.thinking IronRuby at OSCON 2009 Mono, Moonlight, and scripting open source apps" href="http://blog.jimmy.schementi.com/2009/07/ironruby-at-oscon-2009-mono-moonlight.html"&gt;jimmy.thinking&#xD;
IronRuby at OSCON 2009 Mono, Moonlight, and scripting open source apps&lt;/a&gt;. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
The short version of my take on the state of &lt;a href="http://ironruby.info/"&gt;IronRuby&lt;/a&gt; is&#xD;
that it’s real this year. Last year and the year before, I talked about IronRuby but&#xD;
I really couldn’t show anything that I would actually consider putting it into production.&#xD;
This year, between the &lt;a href="http://www.visitmix.com/labs/gestalt"&gt;Gestalt&lt;/a&gt; stuff,&#xD;
the Witty app with the Repl/IronRuby scripting attached and many many more demos,&#xD;
I had some really awesome and powerful things to show people. I think I turned some&#xD;
heads. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
It didn’t hurt that &lt;a href="http://fallenrogue.com"&gt;Leon Gersing&lt;/a&gt;, who wrote all&#xD;
of the labs and docs for Gestalt, was sitting in the back of the room.  &#xD;
&lt;/p&gt;&lt;h3&gt;Why "Enterprise Tools" Are Bad for the Enterprise&#xD;
&lt;/h3&gt;&lt;p&gt;&lt;a href="http://www.vanderburg.org/Blog"&gt;&lt;a title="Glenn Vanderburg - Erubycon 2009 - Day 2" href="http://www.flickr.com/photos/40542539@N00/3802775850/"&gt;&lt;img class="flickr" border="0" hspace="5" alt="Glenn Vanderburg - Erubycon 2009 - Day 2" vspace="5" align="left" src="http://static.flickr.com/3451/3802775850_5f10c6ba7c_m.jpg"&gt;&lt;/img&gt;&lt;/a&gt;Glenn&#xD;
Vanderburg&lt;/a&gt; did a talk the next time about the enterprise and how development goes&#xD;
there. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
The first thing that Glenn did is rehash his first &lt;a href="http://erubycon.com/"&gt;eRubycon&lt;/a&gt; talk&#xD;
on Ruby in the Enterprise. The quick summation goes as follows - “Here are tools that&#xD;
will let you build software quickly, cheaply, with below-average developers”….“Enterprise&#xD;
problems are not nearly as much technology problems as much as they are people problems.”…“You&#xD;
have to write Enterprise software with the expectation that it might still be in production&#xD;
in 30 years. I really liked that talk. These are drums that I’ve been beating, although&#xD;
not as eloquently as Glenn does, for quite some time. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
Glenn then talked about a the state of the industry in the form of a case study with&#xD;
Verizon Business. The reality is that there are a number of enterprises that are starting&#xD;
to look at agile development and figure out how it will work for them. There are a&#xD;
couple of ways to go about that. There’s the whole sale change over, which have largely&#xD;
failed for a number of different reasons. The second way is to run a small pilot effort&#xD;
that tries a few small projects to prove things out. These largely succeed but there’s&#xD;
no real follow up. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
The reality is that the overall organization might need to change in order set itself&#xD;
up for success. To demonstrate the point, Glenn talked about how accounting was done&#xD;
in manufacturing organizations of old verses today. At one point in time, inventory&#xD;
was considered an asset. While this makes sense on it’s face, it actually created&#xD;
a number of counter incentives for productivity and sales as factories started hording&#xD;
inventory and materials. This pushed a change in the industry to start looking at&#xD;
inventory as a liability. This pushes things like lean manufacturing and just in time&#xD;
ordering of inventory. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
So, what we need to do is to start looking for those type of hidden counter incentives&#xD;
in the enterprise. These are actually not that hard to find, we just need to start&#xD;
identifying them and figure out how to articulate these incentives in the correct&#xD;
language for the business. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
“Individuals and interactions over process and tools”&#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
Context-Switching is one place where people loose a lot of time. This is not talking&#xD;
about multi-tasking, this is talking about having to change tasks quite often and&#xD;
have the change the mental model to work on. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
The next topic was “One job at a time”. The idea here is that there are a lot of tools&#xD;
in Ruby that do one and only one thing. Cucumber is an example. It allows you to write&#xD;
a specific type of test but you can’t really get distracted and do other things while&#xD;
writing in Cucumber because it really only does that one thing. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
The next topic was “Crazy as I wanna be”. The idea here is that enterprise tools try&#xD;
to sell you on the concept that with that tool you can do anything. And typically&#xD;
don’t have to write any code in the meantime. The reality is that the tools cannot&#xD;
replace smart people doing smart people. Ruby allows you to do whatever crazy things&#xD;
you want to do without having that crazy be the main stream. This is common for agile&#xD;
tools. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
Glenn then started talking about the idea that you shouldn’t buy tools that have “Impenetrable&#xD;
Skin”. These are the tools that typically have lots of configuration options but if&#xD;
you have a need outside of the imagination of the original tools writers, you are&#xD;
stuck. Glenn prefers “Onionskin APIs”. These are the tools and APIs that you don’t&#xD;
have to crack up most of the time but you can if you have to. Rails and ActiveRecord&#xD;
are good examples of this. &#xD;
&lt;/p&gt;&lt;p&gt;&lt;a title="Glenn Vanderburg - Erubycon 2009 - Day 2" href="http://www.flickr.com/photos/40542539@N00/3801958025/"&gt;&lt;img class="flickr" border="0" hspace="5" alt="Glenn Vanderburg - Erubycon 2009 - Day 2" vspace="5" align="left" src="http://static.flickr.com/2661/3801958025_f6e9d5957a_m.jpg"&gt;&lt;/img&gt;&lt;/a&gt;Many&#xD;
enterprise tools are often large enough that they are they have their own ecosystem.&#xD;
What that means is they have their own group of people who’s sole job is managing&#xD;
and maintaining the tool. There are lots of examples of this such as databases, service&#xD;
busses and the like. The example that Glenn talked about quite a bit was ClearCase.&#xD;
The issue is that the tool is sold to the people that don’t use it all that much.&#xD;
These tools are sold to managers and project leads who use the tool an hour a week&#xD;
at best. It’s not sold to the developers who are going to use the tool 20 times a&#xD;
day. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
The interesting issue is that as these tools start to gather their own ecosystem,&#xD;
the counter incentives start to mount. The use of the tool justifies the ecosystem&#xD;
which promotes the use of the tool regardless of whether or not it’s the right thing&#xD;
because it’s job security for them. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
So many enterprises start by treating the symptoms verses actually fixing the problem.&#xD;
One of the treating the symptoms results is rules engines. Rules engines are not inherently&#xD;
the problem. The issue comes in when the rules engine is there because the engineering&#xD;
and development teams are unresponsive. The rules are really code but they are not&#xD;
treated as such. The result is that the people are making changes that are not tested&#xD;
and put through the correct rigor. This will eventually break and we’re back to the&#xD;
beginning. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
The next set of symptoms that enterprises take on are really people problems. For&#xD;
example, why are there reuse repositories? Nobody uses them, ever. The reality is&#xD;
that reuse is far more of a people problem than it is a far more than it’s a technology&#xD;
problem. Requirements traceability programs are another great treatment of a symptom.&#xD;
The reality is that these problems are set up to assign blame. Many of the agile tools,&#xD;
such as Cucumber, leveraging index cards or Kanban boards get the benefits of the&#xD;
requirements traceability programs without the overhead and negatives. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
The last topic is “Too much control”. The control that the business is really trying&#xD;
to force down is far less about moving forward than it is to keep people from making&#xD;
big mistakes. Too much control, however, stifles innovations and keeps people from&#xD;
making leaps of faith and trying new things. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
To get the benefits that people are looking for with the control without the negatives,&#xD;
you need to ratchet up the communications and visibility rather than tightening down&#xD;
thing. Most of the tools in the agile and Ruby space fit this bill really well. &#xD;
&lt;/p&gt;&lt;h3&gt;Panel discussion&#xD;
&lt;/h3&gt;&lt;p&gt;&lt;a title="Panel - Erubycon 2009 - Day 2" href="http://www.flickr.com/photos/40542539@N00/3801962959/"&gt;&lt;img class="flickr" border="0" hspace="5" alt="Panel - Erubycon 2009 - Day 2" vspace="5" align="left" src="http://static.flickr.com/2483/3801962959_91a61aeb19_m.jpg"&gt;&lt;/img&gt;&lt;/a&gt;Joe&#xD;
closed out the day by putting together a panel discussion with a number of people&#xD;
that have had success in the enterprise with Ruby. &#xD;
&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.evilmartini.com/blog/"&gt;Randal Thomas&lt;/a&gt; kicked off the panel&#xD;
with a story about a project where he taught a number of VB developers Ruby and was&#xD;
able to kick out and an application that was originally speced for 6 months in about&#xD;
a month. But the business freaked out and shut the project down. They went back and&#xD;
redid the project in “approved” technologies in about 6 months. &lt;a href="http://www.codesherpas.com/"&gt;David&#xD;
Bock&lt;/a&gt; followed with a similar story. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
The topic quickly shifted to the idea that we really need to understand the business&#xD;
side and how to introduce ideas in such a way that you are not putting them on the&#xD;
defensive. &lt;a href="http://www.codesherpas.com/"&gt;David Bock&lt;/a&gt; and &lt;a href="http://www.vanderburg.org/Blog"&gt;Glenn&#xD;
Vanderburg&lt;/a&gt; both recommended a book called &lt;a href="http://www.amazon.com/gp/product/0201741571?ie=UTF8&amp;amp;tag=joshholmescom-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=0201741571"&gt;Fearless&#xD;
Change: Patterns for Introducing New Ideas&lt;/a&gt; by &lt;a href="http://www.amazon.com/gp/redirect.html?ie=UTF8&amp;amp;location=http%3A%2F%2Fwww.amazon.com%2Fs%3Fie%3DUTF8%26redirect%3Dtrue%26search-type%3Dss%26index%3Dbooks%26ref%3Dntt%255Fathr%255Fdp%255Fsr%255F2%26field-author%3DLinda%2520Rising&amp;amp;tag=joshholmescom-20&amp;amp;linkCode=ur2&amp;amp;camp=1789&amp;amp;creative=390957"&gt;Linda&#xD;
Rising&lt;/a&gt;. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
One of the ideas is that they pitched is that you should start looking for allies.&#xD;
There will be a DBA somewhere that wants to run PostGreSQL and so on. Start quietly&#xD;
gathering that army and mount a campaign.&#xD;
&lt;/p&gt;&lt;img width="0" height="0" src="http://www.joshholmes.com/blog/aggbug.ashx?id=295d25ee-b687-40b9-ba72-efae2290f2bb"&gt;&lt;/img&gt;&lt;br&gt;&lt;hr&gt;&lt;/hr&gt;&#xD;
This weblog is sponsored by &amp;lt;a href="http://www.joshholmes.com"&amp;gt;Josh Holmes&amp;lt;/a&amp;gt;. &#xD;
&lt;/body&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JoshHolmes?a=JgQvIhmngoo:rabUYyx8We4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoshHolmes?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoshHolmes?a=JgQvIhmngoo:rabUYyx8We4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoshHolmes?i=JgQvIhmngoo:rabUYyx8We4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoshHolmes?a=JgQvIhmngoo:rabUYyx8We4:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoshHolmes?i=JgQvIhmngoo:rabUYyx8We4:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoshHolmes?a=JgQvIhmngoo:rabUYyx8We4:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoshHolmes?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoshHolmes?a=JgQvIhmngoo:rabUYyx8We4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoshHolmes?i=JgQvIhmngoo:rabUYyx8We4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JoshHolmes/~4/JgQvIhmngoo" height="1" width="1"/&gt;</description><comments>http://www.joshholmes.com/blog/CommentView,guid,295d25ee-b687-40b9-ba72-efae2290f2bb.aspx</comments><feedburner:origLink>http://www.joshholmes.com/blog/2009/08/08/eRubycon2009Day2.aspx</feedburner:origLink></item><item><trackback:ping>http://www.joshholmes.com/blog/Trackback.aspx?guid=d35dafc3-0359-46eb-8ee1-ec3ae1505c21</trackback:ping><pingback:server>http://www.joshholmes.com/blog/pingback.aspx</pingback:server><pingback:target>http://www.joshholmes.com/blog/PermaLink,guid,d35dafc3-0359-46eb-8ee1-ec3ae1505c21.aspx</pingback:target><dc:creator>Josh Holmes</dc:creator><wfw:comment>http://www.joshholmes.com/blog/CommentView,guid,d35dafc3-0359-46eb-8ee1-ec3ae1505c21.aspx</wfw:comment><wfw:commentRss>http://www.joshholmes.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=d35dafc3-0359-46eb-8ee1-ec3ae1505c21</wfw:commentRss><slash:comments>2</slash:comments><title>eRubycon 2009 Day 1</title><guid isPermaLink="false">http://www.joshholmes.com/blog/PermaLink,guid,d35dafc3-0359-46eb-8ee1-ec3ae1505c21.aspx</guid><link>http://feedproxy.google.com/~r/JoshHolmes/~3/D5Uw16s3CUE/eRubycon2009Day1.aspx</link><pubDate>Fri, 07 Aug 2009 21:34:01 GMT</pubDate><description>&lt;body xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;&lt;a title="Joe O'Brien - Erubycon 2009 - Day 1" href="http://www.flickr.com/photos/40542539@N00/3800112824/"&gt;&lt;img class="flickr" border="0" hspace="5" alt="Joe O'Brien - Erubycon 2009 - Day 1" vspace="5" align="left" src="http://static.flickr.com/2658/3800112824_53b587606b_m.jpg"&gt;&lt;/img&gt;&lt;/a&gt;This&#xD;
is my third year at &lt;a href="http://erubycon.com/"&gt;eRubycon&lt;/a&gt;. I’m thrilled to be&#xD;
involved and speaking again this year. I’m shocked every year when Joe picks me as&#xD;
a speaker. I’m just honored to be considered worthy of speaking on a docket with Jim&#xD;
Weirich, Glenn Vanderburg, Leon Gersing, Charles Nutter, Randall Thomas, Neal Ford&#xD;
and all of the rest of the amazing speakers that are here. It’s definitely one of&#xD;
my can’t miss conferences every year. &#xD;
&lt;/p&gt;&lt;p&gt;&lt;a href="http://objo.com"&gt;Joe O’Brien&lt;/a&gt; does a great job putting this conference&#xD;
on year after year. The logistics are smooth, the talks are great and the vision for&#xD;
the conference is crystal clear. &#xD;
&lt;/p&gt;&lt;h3&gt;SOLID Ruby&#xD;
&lt;/h3&gt;&lt;p&gt;&lt;a href="http://onestepback.org/"&gt;&lt;a title="Jim Weirich - Erubycon 2009 - Day 1" href="http://www.flickr.com/photos/40542539@N00/3799292153/"&gt;&lt;img class="flickr" border="0" hspace="5" alt="Jim Weirich - Erubycon 2009 - Day 1" vspace="5" align="left" src="http://static.flickr.com/3439/3799292153_635bc71d3c_m.jpg"&gt;&lt;/img&gt;&lt;/a&gt;Jim&#xD;
Weirich&lt;/a&gt; started off the day with a talk called “SOLID Ruby”. The whole talk is&#xD;
already up on github at &lt;a href="http://github.com/jimweirich/presentation_solid_ruby"&gt;http://github.com/jimweirich/presentation_solid_ruby&lt;/a&gt;.&#xD;
Jim is not only very informative but fun to listen to. I really like his delivery&#xD;
and sense of humor. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
The first question that he asked is “How do you recognize a good design?” One of the&#xD;
things that Jim points out is that most people can recognize a bad design but we can’t&#xD;
describe what makes a good design. This is actually quite profound. How can we ensure&#xD;
a good design if we can’t describe what makes one? To demonstrate his point, he talked&#xD;
about the 1666 London fire and the subsequent plans to rebuild the city. He talked&#xD;
about 4 to 6 very distinct designs that were all presented to the king at the time.&#xD;
They actually didn’t build any of designs but rather did the first ever agile project&#xD;
with an incremental build and no huge design up front. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
SOLID&lt;br&gt;&#xD;
S – Single Responsibility Principle (SRP)&lt;br&gt;&#xD;
O – Open Closed Principle (OCP)&lt;br&gt;&#xD;
L – Liskov Substitution Principle (LSP)&lt;br&gt;&#xD;
I – Interface Segregation Principle (ISP)&lt;br&gt;&#xD;
D – Dependency Inversion Principle (DIP)&#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
SRP – Each class should have one and only one responsibility. You should be able to&#xD;
describe what your class does in a single sentence without using the words “and” or&#xD;
“or”. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
OCP – You should be able to change the behavior of a class without having to modify&#xD;
it. This is the basis of inheritance. In Ruby, you can just open a class and “Fix&#xD;
it” right? &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
DIP – Jim took this one out of order because it made ore sense when trying to explain&#xD;
things. Depend on abstractions, not on concretions. In static language such as Java,&#xD;
C#, C++ it meas that you develop to interfaces. In Ruby, you don’t have to do that&#xD;
as there are no hard references to classes so you can swap out classes at will. If&#xD;
you want to swap out the class, you just have to have all of the methods that the&#xD;
code that leverages that class call. Jim calls this coding to a protocol verses coding&#xD;
to a spec or interface. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
LSP – the question answered here is how do you know if you can swap out two classes?&#xD;
The reality is that it’s more than just are the methods require present. It’s what&#xD;
are the promises back as well. For example, if you have a square root function but&#xD;
you require a certain level of precision. From the LISP community, Jim pulls the phrase&#xD;
“Require No More, Promise No Less”. If you are well covered on testing, this will&#xD;
be automatic.&#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
ISP – Make fine grained interfaces that are client specific. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
To finish up, Jim opened things up for discussion but in traditional Jim fashion he&#xD;
did things a little different. He brought the questions for the discussion. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
First question - “ActiveRecord objects implement a domain concept and a persistence&#xD;
concept. Does that break the SRP?” &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
Next question - “How do you verify that your client software only uses the (narrow)&#xD;
protocol you expect"?”&#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
Next question - “Some SOLID principles are an awkward fit for Ruby as they were built&#xD;
for static languages. Are there design principles from dynamic languages that are&#xD;
awkward fits for static languages?” &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
One of the key points that Jim implicitly made is that Ruby the language auto-implements&#xD;
many of the SOLID principles and the the culture pushes the rest of them in great&#xD;
ways. &#xD;
&lt;/p&gt;&lt;h3&gt;Testing the Enterprise&#xD;
&lt;/h3&gt;&lt;p&gt;&lt;a title="Charlie Baker and Leon Gersing - Erubycon 2009 - Day 1" href="http://www.flickr.com/photos/40542539@N00/3799297739/"&gt;&lt;img class="flickr" border="0" hspace="5" alt="Charlie Baker and Leon Gersing - Erubycon 2009 - Day 1" vspace="5" align="left" src="http://static.flickr.com/3571/3799297739_f814ba231d_m.jpg"&gt;&lt;/img&gt;&lt;/a&gt;I&#xD;
was really sorry but I had to miss this talk. I’m planning on getting a summary from&#xD;
the speakers later tonight and posting some notes later. They posted their slides&#xD;
at &lt;a href="http://fallenrogue.s3.amazonaws.com/Testing%20the%20Enterprise.pdf"&gt;http://fallenrogue.s3.amazonaws.com/Testing%20the%20Enterprise.pdf&lt;/a&gt;.&#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
In short, &lt;a href="http://www.fallenrogue.com"&gt;Leon Gersing&lt;/a&gt; and &lt;a href="http://twitter.com/charley_baker"&gt;Charley&#xD;
Baker&lt;/a&gt; have been working at the Gap on a large project. A big reason for the success&#xD;
of the project and the team is the rigor around testing. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
I asked Leon to email me a short write-up and this is what he sent me:&#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
+++++++++++++++++++++++++++++++++++++++++++++++++&lt;br&gt;&#xD;
“Testing the Enterprise” is about how we brought Ruby testing into Gap Inc Direct.&#xD;
GID has campuses in Columbus, San Francisco and offshore. In addition to the challenges&#xD;
in a distributed environment, training QA resources and developers new to Ruby, Watir,&#xD;
other libraries; we'll be talking about incremental adoption of Ruby in the Enterprise,&#xD;
and how it enables us to move from a Waterfall SDLC into an Agile model.&lt;br&gt;&#xD;
We'll be going over lessons learned, pitfalls and successes. The points of view will&#xD;
be from &lt;a href="http://www.fallenrogue.com"&gt;Leon Gersing&lt;/a&gt;, who has been responsible&#xD;
for the adoption of Ruby at our San Francisco campus over the past 4 years, and &lt;a href="http://www.fallenrogue.com"&gt;Leon&#xD;
Gersing&lt;/a&gt; from &lt;a href="http://www.edgecase.com"&gt;EdgeCase&lt;/a&gt;, who's working with&#xD;
our Columbus distribution IT organization as they adopt Agile practices and using &lt;a href="http://wiki.github.com/aslakhellesoy/cucumber"&gt;Cucumber&lt;/a&gt; have&#xD;
bridged the gap between developers, QA and product teams.&lt;br&gt;&#xD;
+++++++++++++++++++++++++++++++++++++++++++++++++ &#xD;
&lt;/p&gt;&lt;h3&gt;Rails in the Large: How Agility Allows Us to Build the World's Biggest Rails App&#xD;
&lt;/h3&gt;&lt;p&gt;&lt;a href="http://www.nealford.com/"&gt;&lt;a title="Neal Ford - Erubycon 2009 - Day 1" href="http://www.flickr.com/photos/40542539@N00/3800128068/"&gt;&lt;img class="flickr" border="0" hspace="5" alt="Neal Ford - Erubycon 2009 - Day 1" vspace="5" align="left" src="http://static.flickr.com/2626/3800128068_f68f620344_m.jpg"&gt;&lt;/img&gt;&lt;/a&gt;Neil&#xD;
Ford&lt;/a&gt; came in next and talked about the largest Rails applications known to man. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
The application itself is a car wholesaler web site called &lt;a href="http://ove.com"&gt;http://ove.com&lt;/a&gt;.&#xD;
He started out talking about how the project came about in the first place. They had&#xD;
a huge complicated web site built in Java. They were looking to do a ground up rewrite&#xD;
in either .NET or Rails. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
Neil asked them “There are 300 Java developers downstairs, why don’t you want to rewrite&#xD;
it in Java?” The answer was “Frankly, we don’t want them to touch it.”. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
Neil convinced them to go with Rails. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
They started out in January of 2007 and built the team at 1 new pair of developers&#xD;
to the project every two weeks. At this point they have 11 pairs of developers, 8&#xD;
business analysts, an iteration manager, 6 quality assurance, a project manager and&#xD;
a client principle. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
One of the key points that Neil made here is that “technology isn’t as important as&#xD;
responsiveness to business needs”. There are a lot of people in the technology world&#xD;
that don’t get that. The reality is that most customers don’t care about what the&#xD;
underlying technologies are, they only care that their business requirements are met. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
One of the things that Neil pointed out very strongly, and actually spent a lot of&#xD;
time talking about, is the importance of the testing and specifically the way that&#xD;
they did them. One of the interesting stats that he threw out is that they have 3.2&#xD;
lines of test code for every line of production code. There’s currently close to 100k&#xD;
lines of test code.&#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
Obviously, this is a lot of code so they have had to pull together a number of other&#xD;
resources and tools to put together to actually run all of the projects. One of them&#xD;
that struck my fancy is &lt;a href="http://github.com/qxjit/deep-test/tree/master"&gt;DeepTest&lt;/a&gt;.&#xD;
It can do distributed testing of your Ruby code. Another one is Selenium grid. This&#xD;
does distributed running of Selenium tests. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
One of the side effects of all of this distributed testing is that they have no setup&#xD;
and tear down methods in the tests. Rather all of the tests are completely standalone. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
There were a number of social engineering things that they did that were very successful.&#xD;
They have a theme song for broken builds and theme songs for each person that plays&#xD;
on a successful check ins. &#xD;
&lt;/p&gt;&lt;h3&gt;Agile, Rails and the Cloud: Why companies can't afford to ignore the efficiencies&#xD;
of modern development approaches&#xD;
&lt;/h3&gt;&lt;p&gt;&lt;a href="http://www.pivotallabs.com/who#ian"&gt;&lt;a title="Ian McFarland Erubycon 2009 - Day 1" href="http://www.flickr.com/photos/40542539@N00/3800141910/"&gt;&lt;img class="flickr" border="0" hspace="5" alt="Ian McFarland Erubycon 2009 - Day 1" vspace="5" align="left" src="http://static.flickr.com/3481/3800141910_3d7fca8d6b_m.jpg"&gt;&lt;/img&gt;&lt;/a&gt;Ian&#xD;
McFarland&lt;/a&gt; finished off the day with a talk about why modern development approaches&#xD;
matter to business. This is a very important thing to talk about and think about for&#xD;
businesses. The reality is that not nearly enough people spend time considering. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
He started talking about Agile development and walked through many of the core tenants.&#xD;
He put forth fairly compelling arguments that you really do need to follow the tenants&#xD;
of Agile. For example, having the customers setting the priorities on the things that&#xD;
you are building matters because it helps you produce business value faster. He spent&#xD;
quite a bit of time arguing that you really do need to do paired programming. Everyone&#xD;
learns more faster, gets distracted less and the team knowledge goes up dramatically. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
After that, he switched to talking about Rails. He’s got data that switching from&#xD;
Java to Rails proved out to have have 2-4x productivity gain for the developers. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
Then he talked about the Cloud. To steal words from &lt;a href="http://www.brianhprince.com"&gt;Brian&#xD;
Prince&lt;/a&gt; to help paraphrase Ian’s thoughts here - “Don’t be a plumber!”. Unless&#xD;
it’s critical to your business to run your own infrastructure, you should outsource&#xD;
the infrastructure. Actually, he made a strong argument that you should outsource&#xD;
a number of things. As I’ve said for a long time, if it doesn’t add to your companies&#xD;
stock price, why are you building it? There are times that you have to run your own&#xD;
infrastructure such as regulatory issues or business needs that make it more advantageous&#xD;
to have it internal. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
At the end, he made a very contentious statement that Rails is not ready for the Enterprise.&#xD;
There are a number of reasons for this and mostly it comes to the fact that Enterprise&#xD;
is actually not ready for Ruby. The actual barriers are being solved. For example,&#xD;
companies such as Engine Yard are solving cloud issues and the like. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
 &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
Now for dinner – more tomorrow!&#xD;
&lt;/p&gt;&lt;img width="0" height="0" src="http://www.joshholmes.com/blog/aggbug.ashx?id=d35dafc3-0359-46eb-8ee1-ec3ae1505c21"&gt;&lt;/img&gt;&lt;br&gt;&lt;hr&gt;&lt;/hr&gt;&#xD;
This weblog is sponsored by &amp;lt;a href="http://www.joshholmes.com"&amp;gt;Josh Holmes&amp;lt;/a&amp;gt;. &#xD;
&lt;/body&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JoshHolmes?a=D5Uw16s3CUE:unazA00nZ44:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoshHolmes?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoshHolmes?a=D5Uw16s3CUE:unazA00nZ44:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoshHolmes?i=D5Uw16s3CUE:unazA00nZ44:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoshHolmes?a=D5Uw16s3CUE:unazA00nZ44:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoshHolmes?i=D5Uw16s3CUE:unazA00nZ44:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoshHolmes?a=D5Uw16s3CUE:unazA00nZ44:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoshHolmes?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoshHolmes?a=D5Uw16s3CUE:unazA00nZ44:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoshHolmes?i=D5Uw16s3CUE:unazA00nZ44:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JoshHolmes/~4/D5Uw16s3CUE" height="1" width="1"/&gt;</description><comments>http://www.joshholmes.com/blog/CommentView,guid,d35dafc3-0359-46eb-8ee1-ec3ae1505c21.aspx</comments><feedburner:origLink>http://www.joshholmes.com/blog/2009/08/07/eRubycon2009Day1.aspx</feedburner:origLink></item><item><trackback:ping>http://www.joshholmes.com/blog/Trackback.aspx?guid=cce3402c-1695-49e8-9c17-e3f9f842fa0d</trackback:ping><pingback:server>http://www.joshholmes.com/blog/pingback.aspx</pingback:server><pingback:target>http://www.joshholmes.com/blog/PermaLink,guid,cce3402c-1695-49e8-9c17-e3f9f842fa0d.aspx</pingback:target><dc:creator>Josh Holmes</dc:creator><wfw:comment>http://www.joshholmes.com/blog/CommentView,guid,cce3402c-1695-49e8-9c17-e3f9f842fa0d.aspx</wfw:comment><wfw:commentRss>http://www.joshholmes.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=cce3402c-1695-49e8-9c17-e3f9f842fa0d</wfw:commentRss><title>The Lost Art of Simplicity</title><guid isPermaLink="false">http://www.joshholmes.com/blog/PermaLink,guid,cce3402c-1695-49e8-9c17-e3f9f842fa0d.aspx</guid><link>http://feedproxy.google.com/~r/JoshHolmes/~3/pQyxzfMMBRs/TheLostArtOfSimplicity.aspx</link><pubDate>Wed, 29 Apr 2009 07:22:14 GMT</pubDate><description>&lt;body xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;div style="text-align: left; margin: 5px; width: 425px; float: left" id="__ss_1360628"&gt;&lt;a style="margin: 12px 0px 3px; display: block; font: 14px helvetica,arial,sans-serif; text-decoration: underline" title="The Lost Art of Simplicity" href="http://www.slideshare.net/joshholmes/the-lost-art-of-simplicity?type=presentation"&gt;The&#xD;
Lost Art of Simplicity&lt;/a&gt;&lt;object style="margin:0px" width="425" height="355"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=thelostartofsimplicity-090429005537-phpapp01&amp;amp;rel=0&amp;amp;stripped_title=the-lost-art-of-simplicity"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowScriptAccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=thelostartofsimplicity-090429005537-phpapp01&amp;amp;rel=0&amp;amp;stripped_title=the-lost-art-of-simplicity" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style="font-family: tahoma,arial; height: 26px; font-size: 11px; padding-top: 2px"&gt;View&#xD;
more &lt;a style="text-decoration: underline" href="http://www.slideshare.net/"&gt;presentations&lt;/a&gt; from &lt;a style="text-decoration: underline" href="http://www.slideshare.net/joshholmes"&gt;Josh&#xD;
Holmes&lt;/a&gt;.&#xD;
&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&#xD;
 &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
I recently did a keynote at the &lt;a href="http://cinnug.org/cododn/default.aspx"&gt;Central&#xD;
Ohio Day of .NET&lt;/a&gt; and a session at &lt;a href="http://www.kalamazoox.org/"&gt;Kalamazoo&#xD;
X&lt;/a&gt; called “The Lost Art of Simplicity. I have to say that I’ve not been as excited&#xD;
about a specific talk in quite a while. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
I posted the slides to SlideShare and I’ve signed up for speaker rate for this session.&#xD;
I would love some feedback. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
Slides on SlideShare - &lt;a title="http://www.slideshare.net/joshholmes/the-lost-art-of-simplicity" href="http://www.slideshare.net/joshholmes/the-lost-art-of-simplicity"&gt;http://www.slideshare.net/joshholmes/the-lost-art-of-simplicity&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&#xD;
Speaker Rate - &lt;a title="http://www.speakerrate.com/talks/773-the-lost-art-of-simplicity" href="http://www.speakerrate.com/talks/773-the-lost-art-of-simplicity"&gt;http://www.speakerrate.com/talks/773-the-lost-art-of-simplicity&lt;/a&gt; &#xD;
&lt;/p&gt;&lt;h4&gt;The Lost Art of Simplicity - Presentation Transcript&#xD;
&lt;/h4&gt;&lt;ol&gt;&lt;li&gt;&#xD;
The Lost Art of Simplicity Josh Holmes joshholmes.com &lt;a href="mailto:josh.holmes@microsoft.com"&gt;josh.holmes@microsoft.com&lt;/a&gt;&lt;br&gt;&lt;a href="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/TheLostArtofSimplicity_2E90/image_6.png"&gt;&lt;img style="border-right-width: 0px; margin: 5px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/TheLostArtofSimplicity_2E90/image_thumb_2.png" width="354" height="265"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;&#xD;
sim·plic·i·ty (sm-pls-t) n. &#xD;
&lt;br&gt;&#xD;
1. The property, condition, or quality of being simple or uncombined. &#xD;
&lt;br&gt;&#xD;
2. Absence of luxury or showiness; plainness. &#xD;
&lt;br&gt;&#xD;
3. Absence of affectation or pretense. &#xD;
&lt;br&gt;&#xD;
4. a. Lack of sophistication or subtlety; naiveté. &#xD;
&lt;br&gt;&#xD;
    b. Lack of good sense or intelligence; foolishness. &#xD;
&lt;br&gt;&#xD;
5. a. Clarity of expression. &#xD;
&lt;br&gt;&#xD;
    b. Austerity in embellishment. &#xD;
&lt;br&gt;&lt;a href="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/TheLostArtofSimplicity_2E90/image_8.png"&gt;&lt;img style="border-right-width: 0px; margin: 5px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/TheLostArtofSimplicity_2E90/image_thumb_3.png" width="354" height="263"&gt;&lt;/img&gt;&lt;/a&gt;&lt;p&gt;&#xD;
Let’s start off by talking about what simplicity is. The official dictionary definition&#xD;
has 5 parts. We are going to focus in on the first definition. Simplicity is the property,&#xD;
condition or quality of being simple or uncombined. This is a beautiful statement&#xD;
that is unfortunately missing in much of our current application development. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
When we talk about something being simple, often people just right to the fourth definition&#xD;
assuming that it’s lacking sophistication or good sense and intelligence. That it’s&#xD;
foolish. As technologists, our tendency when we see something that’s simple is to&#xD;
say “Oh, I could write it in a weekend”. There’s a fair amount of NIH (Not Invented&#xD;
Here) tendencies that are just part of our culture. This is a dangerous concept. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
The last definition is the one that I really like. To have a something that has “Clarity&#xD;
of Expression” is awesome. Put that with the first definition and we really have something.&#xD;
I’m striving to solve problems in ways that are “Simple and uncombined” with “Clarity&#xD;
of Expression”. &#xD;
&lt;/p&gt;&lt;p&gt;&lt;a href="http://hikingartist.com/Peopletypes_g54-King_type_p124.html"&gt;http://hikingartist.com/Peopletypes_g54-King_type_p124.html&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&#xD;
http://www.thefreedictionary.com/simplicity &#xD;
&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&#xD;
Simplicity is an acquired taste. Mankind, left free, instinctively complicates life&#xD;
- Katherine F. Gerould &#xD;
&lt;br&gt;&lt;a href="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/TheLostArtofSimplicity_2E90/image_10.png"&gt;&lt;img style="border-right-width: 0px; margin: 5px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/TheLostArtofSimplicity_2E90/image_thumb_4.png" width="354" height="266"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br&gt;&lt;p&gt;&#xD;
One of the great things about the human race is that we are a race of problem solvers.&#xD;
And we take great pride in our solutions. The issue is that the solutions that we&#xD;
are most proud of are the ones that only we can understand. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
The best ideas, however, are the ideas that are immediately obvious once someone shows&#xD;
it to you. It’s that head smack “Duh” moment that accompanies those great ideas that&#xD;
I really like. &#xD;
&lt;/p&gt;&lt;p&gt;&lt;a href="http://hikingartist.com/animals_g58-evolution_p60.html"&gt;http://hikingartist.com/animals_g58-evolution_p60.html&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&#xD;
I adore simple pleasures. They are the last refuge of the complex. - Oscar Wilde &#xD;
&lt;br&gt;&lt;a href="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/TheLostArtofSimplicity_2E90/image_12.png"&gt;&lt;img style="border-right-width: 0px; margin: 5px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/TheLostArtofSimplicity_2E90/image_thumb_5.png" width="354" height="266"&gt;&lt;/img&gt;&lt;/a&gt;&lt;p&gt;&#xD;
Let’s use the example of this guy dreaming about having that apple for lunch… It’s&#xD;
a fairly simple problem on it’s face. We, as IT folks, get the IT equivalent of this&#xD;
issue day in a day out. &#xD;
&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.flickr.com/photos/hikingartist/3010374978/"&gt;http://www.flickr.com/photos/hikingartist/3010374978/&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&#xD;
Our life is frittered away by detail. Simplicity, simplicity, simplicity! - Henry&#xD;
David Thoreau &#xD;
&lt;br&gt;&lt;a href="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/TheLostArtofSimplicity_2E90/image_14.png"&gt;&lt;img style="border-right-width: 0px; margin: 5px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/TheLostArtofSimplicity_2E90/image_thumb_6.png" width="354" height="265"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br&gt;&lt;p&gt;&#xD;
Can I get report of sales by geography? How about splitting that by demographics such&#xD;
as age or gender? What’s the effect of our current marketing efforts on sales of our&#xD;
latest line and how does that differ by geography or demographic? Could I enter a&#xD;
contact I met at the picnic into our CRM? Could that be blue? &#xD;
&lt;/p&gt;&lt;p&gt;&lt;a href="http://hikingartist.com/Cartoon_illustration_g29-Still_want_that_apple__p262.html"&gt;http://hikingartist.com/Cartoon_illustration_g29-Still_want_that_apple__p262.html&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&#xD;
Any intelligent fool can make things bigger, more complex, and more violent. It takes&#xD;
a touch of genius -- and a lot of courage -- to move in the opposite direction. -&#xD;
Albert Einstein &#xD;
&lt;br&gt;&lt;a href="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/TheLostArtofSimplicity_2E90/image_16.png"&gt;&lt;img style="border-right-width: 0px; margin: 5px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/TheLostArtofSimplicity_2E90/image_thumb_7.png" width="354" height="266"&gt;&lt;/img&gt;&lt;/a&gt;&lt;p&gt;&#xD;
Our biggest fear is that the user is going to go get a copy of Access or something&#xD;
equally destructive and try to solve the problem themselves. Often they can effectively&#xD;
solve the short term problem and in the process bring down the enterprise… &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
And this is a dangerous thing because as they open up the simple tools such as access&#xD;
and solve just their problem, they are potentially causing other issues like data&#xD;
redundancy throughout the company or duplicating efforts with another group. Often&#xD;
these solutions are even done with ignorance to larger concerns such as privacy laws. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
Even so, they are solving their problem in the short term and that was their goal. &#xD;
&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.flickr.com/photos/hikingartist/3010374978/"&gt;http://www.flickr.com/photos/hikingartist/3010374978/&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&#xD;
Most of the fundamental ideas of science are essentially simple, and may, as a rule,&#xD;
be expressed in a language comprehensible to everyone. - Albert Einstein &#xD;
&lt;br&gt;&lt;a href="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/TheLostArtofSimplicity_2E90/image_18.png"&gt;&lt;img style="border-right-width: 0px; margin: 5px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/TheLostArtofSimplicity_2E90/image_thumb_8.png" width="354" height="268"&gt;&lt;/img&gt;&lt;/a&gt;&lt;p&gt;&#xD;
To head that off, we just, we start throwing our favorite technologies and designs&#xD;
at the problem to solve it in the most “elegant” way. This quickly results in over&#xD;
engineering the task at hand. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
One immediate and obvious danger is that we take that simple request and roll it into&#xD;
the next version of the application that’s going to be 18-36 months down the road&#xD;
ignoring the fact that it’s a pain that the user is feeling today. What happens when,&#xD;
18 months down the road, the user that has requested that feature has solved the problem&#xD;
some other way? Or if that user is not even employed by the company anymore? &#xD;
&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.flickr.com/photos/hikingartist/3010375012/sizes/o/"&gt;http://www.flickr.com/photos/hikingartist/3010375012/sizes/o/&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&#xD;
It takes a long time to make something complicated simple, but if you do, it will&#xD;
work w/o problems for a long time. - F. Andy Seidle, &lt;a href="http://faseidl.com/"&gt;http://faseidl.com/&lt;/a&gt; &lt;br&gt;&lt;a href="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/TheLostArtofSimplicity_2E90/image_39.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 5px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/TheLostArtofSimplicity_2E90/image_thumb.png" width="354" height="265"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br&gt;&lt;p&gt;&#xD;
And the solution that results is not only over engineered but it’s reminiscent of&#xD;
a certain coyote with all of the possible ways that it can fail. The reality is that&#xD;
the more complex a problem is, the more ways that it can fail. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
As a solution ramps up in complexity and “cleverness” it quickly becomes more fragile&#xD;
because there are more moving parts and more possible points of failure. Just because&#xD;
something is using the latest or coolest technology, doesn’t mean that it’s the best&#xD;
idea. If that latest or cool technology reduce complexity in some way, such as reducing&#xD;
the number of tools, streamlining process or raising the bar on the usability then&#xD;
there is a good argument to leverage it. &#xD;
&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.flickr.com/photos/hikingartist/3009540065/"&gt;http://www.flickr.com/photos/hikingartist/3009540065/&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&#xD;
The Innovator’s Dilemma that disruptive innovations are almost never the result of&#xD;
technological breakthroughs but are instead recombination's of existing and often&#xD;
inexpensive technology in forms the former market leaders don’t pursue. - Clayton&#xD;
Christensen &#xD;
&lt;br&gt;&lt;a href="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/TheLostArtofSimplicity_2E90/image_22.png"&gt;&lt;img style="border-right-width: 0px; margin: 5px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/TheLostArtofSimplicity_2E90/image_thumb_10.png" width="354" height="265"&gt;&lt;/img&gt;&lt;/a&gt;&lt;p&gt;&#xD;
In all of this, we are missing the obvious. There are known simple solutions to a&#xD;
lot of the requests that we get on a day to day basis. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
The first thing that we have to get over is the NIH complex that we all have. When&#xD;
you get a new request is your first thought, I can build that… Or is your first thought,&#xD;
I bet that’s been built… &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
The second thing that we have to recognize is that the simple solution is probably&#xD;
the right one. If the solution that we have come up with is a so complicated that&#xD;
we are amazed with ourselves and proud of it, it’s probably the wrong direction. &#xD;
&lt;/p&gt;&lt;p&gt;&lt;a href="http://hikingartist.com/Cartoon_illustration_g29-Want_an_apple_p261.html"&gt;http://hikingartist.com/Cartoon_illustration_g29-Want_an_apple_p261.html&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&#xD;
Dealing with complexity is an inefficient and unnecessary waste of time, attention&#xD;
and mental energy. There is never any justification for things being complex when&#xD;
they could be simple. - Edward de Bono &#xD;
&lt;br&gt;&lt;a href="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/TheLostArtofSimplicity_2E90/image_24.png"&gt;&lt;img style="border-right-width: 0px; margin: 5px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/TheLostArtofSimplicity_2E90/image_thumb_11.png" width="354" height="271"&gt;&lt;/img&gt;&lt;/a&gt;&lt;p&gt;&#xD;
We can’t keep down this destructive path of building more and more complex solutions&#xD;
that take eons to develop when the users have needs that we are not addressing in&#xD;
the short term. &#xD;
&lt;/p&gt;&lt;p&gt;&lt;a href="http://hikingartist.com/Cartoon_illustration_g29-Want_an_apple_p258.html"&gt;http://hikingartist.com/Cartoon_illustration_g29-Want_an_apple_p258.html&lt;/a&gt;   &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
  &#xD;
&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&#xD;
I’m Fine&lt;br&gt;&lt;a href="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/TheLostArtofSimplicity_2E90/image_26.png"&gt;&lt;img style="border-right-width: 0px; margin: 5px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/TheLostArtofSimplicity_2E90/image_thumb_12.png" width="354" height="271"&gt;&lt;/img&gt;&lt;/a&gt;&lt;p&gt;&#xD;
We are living in denial that we are the problem. It’s our insistence that we are the&#xD;
technical gods and know everything that is driving this as a problem in the industry&#xD;
in the first place. &#xD;
&lt;/p&gt;&lt;p&gt;&lt;a href="http://hikingartist.com/Cartoon_illustration_g29-Not_to_be_disturbed_p398.html"&gt;http://hikingartist.com/Cartoon_illustration_g29-Not_to_be_disturbed_p398.html&lt;/a&gt;   &#xD;
&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&#xD;
We need to be very careful about the lure of complexity. We should not fall into the&#xD;
trap of thinking that if it’s hard to design, it must be good; that if it’s using&#xD;
the latest technology, it must be good; that if all our friends think it’s really&#xD;
cool, it must be good. - Gerry McGovern&lt;br&gt;&lt;a href="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/TheLostArtofSimplicity_2E90/image_28.png"&gt;&lt;img style="border-right-width: 0px; margin: 5px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/TheLostArtofSimplicity_2E90/image_thumb_13.png" width="354" height="269"&gt;&lt;/img&gt;&lt;/a&gt;&lt;p&gt;&#xD;
We, as the IT world, tend to go rampant with technology with little to no thought&#xD;
to the consequences. Even though we are trying to make people’s lives easier, at best&#xD;
we do no harm. At worst, we cause a lot of pain and anguish for our users. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
The answer that a lot of us, and I’m guilty of this too, turn to is to vet our ideas&#xD;
and our UI designs with our peers. The issue is that our peers are also technologists&#xD;
who are just as geeked as we are about X new technology. This just perpetuates the&#xD;
problem. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
http://hikingartist.com/Peopletypes_g54-The_akward_type_p86.html &#xD;
&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.gerrymcgovern.com/nt/2004/nt_2004_11_22_complexity.htm"&gt;http://www.gerrymcgovern.com/nt/2004/nt_2004_11_22_complexity.htm&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&#xD;
Things should be made as simple as possible, but not any simpler. - Albert Einstein &#xD;
&lt;br&gt;&lt;a href="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/TheLostArtofSimplicity_2E90/image_32.png"&gt;&lt;img style="border-right-width: 0px; margin: 5px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/TheLostArtofSimplicity_2E90/image_thumb_15.png" width="354" height="265"&gt;&lt;/img&gt;&lt;/a&gt;&lt;p&gt;&#xD;
Let’s take a short step back and examine how complexity comes to our applications&#xD;
in the first place. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
Often complexity sneaks in under different names. One of my favorite is “Enterprise”&#xD;
which almost automatically means a complexity multiplier of 10. The idea here is that&#xD;
we have to be “Enterprise Quality”. This implies a certain engineering rigor, stability&#xD;
and scalability. One huge issue that I have with this term is that if you look at&#xD;
a mid to large sized enterprise with 10k, 20k or even 50K users you are still looking&#xD;
at a user base that would be considered a rounding error on some of the larger consumer&#xD;
facing applications such as Facebook, Twitter, Wikipedia and the like. &#xD;
&lt;/p&gt;&lt;p&gt;&lt;a href="http://hikingartist.com/animals_g58-Trojan_trap_p106.html"&gt;http://hikingartist.com/animals_g58-Trojan_trap_p106.html&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&#xD;
The whole point of human-centered design is to tame complexity - Don Norman &#xD;
&lt;br&gt;&lt;a href="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/TheLostArtofSimplicity_2E90/image_34.png"&gt;&lt;img style="border-right-width: 0px; margin: 5px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/TheLostArtofSimplicity_2E90/image_thumb_16.png" width="354" height="266"&gt;&lt;/img&gt;&lt;/a&gt;&lt;p&gt;&#xD;
Often the complexity is as simple as not understanding our users. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
I was recently in a long envisioning session with a customer about the next version&#xD;
of their client facing applications. We spent a lot of time hashing through their&#xD;
current application and came up with a number of ways that we might be able to save&#xD;
time or give a better experience. But at some point I backed up and asked the question,&#xD;
what are the top three things that your customers do with the application? If we knew&#xD;
that, we could focus on surfacing those to three tasks in the UI to help cut complexity&#xD;
and time out of the user’s day. The reality is that they couldn’t answer that question.&#xD;
There were some guesses and opinions thrown out but nothing definitive that they could&#xD;
throw out. Their homework assignment was to go back and find that out. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
I find this as an issue in a lot of customer engagements. Very few companies actually&#xD;
know how many of their users are using Windows 98 or IE5 but there is an assumption&#xD;
that it’s an issue so a lot of complexity is built into the system in order to accommodate&#xD;
what might very well be a small portion of their audience. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
The other side of this issue is that there’s what the users say that they want and&#xD;
what they actually need. There are some simple examples. “Could you Web 2.0ify my&#xD;
site?” “I need a X (where X is some buzzword that they just read in some article)&#xD;
technology application” Or any other place where technology enters requirements. This&#xD;
is where we need to redirect the user’s requirements by asking them about their goals&#xD;
and aspirations and then start figuring out what they need from that. “Oh, you want&#xD;
to cut down on the amount of text that your users have to type while increasing the&#xD;
accuracy of their reporting? How about we replace that block of text by allowing them&#xD;
to select a picture of what they are looking for? Yeah, we can do that without requiring&#xD;
them to wait on the page to reload.” &#xD;
&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.flickr.com/photos/hikingartist/3208741909/sizes/o/"&gt;http://www.flickr.com/photos/hikingartist/3208741909/sizes/o/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&#xD;
I apologize for the length of this letter, but I didn't have time to make it shorter.&#xD;
- Mark Twain &#xD;
&lt;br&gt;&lt;a href="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/TheLostArtofSimplicity_2E90/image_36.png"&gt;&lt;img style="border-right-width: 0px; margin: 5px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/TheLostArtofSimplicity_2E90/image_thumb_17.png" width="354" height="265"&gt;&lt;/img&gt;&lt;/a&gt;&lt;p&gt;&#xD;
An unfortunately common problem that I see in the industry is that given group of&#xD;
developers knows one or two technologies and approach every problem with that technology&#xD;
as the solution. The reality is that that there are tremendous number of technologies&#xD;
at their disposal from web applications to desktop applications to mobile applications&#xD;
to hybrid solutions of all of those. You need to approach each problem with an open&#xD;
mind as to what is the best solution for that problem. Sometimes you’ll find that&#xD;
the solution is not actually a technical solution at all. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
The real solution here is to take the time to explore all of the possible solutions,&#xD;
technology based or not. &#xD;
&lt;/p&gt;&lt;p&gt;&lt;a href="http://hikingartist.com/meetings_g55-hammer_management_p129.html"&gt;http://hikingartist.com/meetings_g55-hammer_management_p129.html&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&#xD;
Ok. now what?&lt;br&gt;&lt;a href="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/TheLostArtofSimplicity_2E90/image_38.png"&gt;&lt;img style="border-right-width: 0px; margin: 5px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/TheLostArtofSimplicity_2E90/image_thumb_18.png" width="354" height="266"&gt;&lt;/img&gt;&lt;/a&gt;&lt;p&gt;&#xD;
Where are we now and what can we, as mere cogs in the wheels, do to tackle this problem? &#xD;
&lt;/p&gt;&lt;p&gt;&lt;a href="http://hikingartist.com/Cartoon_illustration_g29-Short_term_solution_p408.html"&gt;http://hikingartist.com/Cartoon_illustration_g29-Short_term_solution_p408.html&lt;/a&gt;   &#xD;
&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&#xD;
\"Think simple\" as my old master used to say - meaning reduce the whole of its parts&#xD;
into the simplest terms, getting back to first principles. - Frank Lloyd Wright &#xD;
&lt;br&gt;&lt;a href="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/TheLostArtofSimplicity_2E90/image_44.png"&gt;&lt;img style="border-right-width: 0px; margin: 5px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/TheLostArtofSimplicity_2E90/image_thumb_21.png" width="354" height="266"&gt;&lt;/img&gt;&lt;/a&gt;&lt;p&gt;&#xD;
There’s, unfortunately, not a magic solution to the issue of complexity. Simple is&#xD;
hard. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
Often you have to come up with several complex solutions that you can boil down to&#xD;
the simple solution. Often, in an effort to find the right solution, I will solve&#xD;
or at least map out solutions to a given problem in several different ways with a&#xD;
number of technologies ranging from desktop to web to mobile to non-technology solutions.&#xD;
Kind of like going to a shoe store and trying on a ton of different styles and sizes&#xD;
of shoes, you can get a lot of interesting ideas from checking out all of the different&#xD;
solutions. You might be surprised by the solutions that make the most sense at the&#xD;
end of the day. &#xD;
&lt;/p&gt;&lt;p&gt;&lt;a href="http://hikingartist.com/Cartoon_illustration_g29-Wizard_type_3_p111.html"&gt;http://hikingartist.com/Cartoon_illustration_g29-Wizard_type_3_p111.html&lt;/a&gt;   &#xD;
&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&#xD;
Simplicity is not the goal. It is the by-product of a good idea and modest expectations.&#xD;
- Paul Rand &#xD;
&lt;br&gt;&lt;a href="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/TheLostArtofSimplicity_2E90/image_46.png"&gt;&lt;img style="border-right-width: 0px; margin: 5px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/TheLostArtofSimplicity_2E90/image_thumb_22.png" width="354" height="266"&gt;&lt;/img&gt;&lt;/a&gt;&lt;p&gt;&#xD;
All of that said though and as much as I’m talking about Simplicity in this talk,&#xD;
the reality is that Paul Rand has it right. “Simplicity is not the goal. It is the&#xD;
by-product of a good idea and modest expectations”. &#xD;
&lt;/p&gt;&lt;p&gt;&lt;a href="http://hikingartist.com/Motivation_g56-The_just_enough_Type_p116.html"&gt;http://hikingartist.com/Motivation_g56-The_just_enough_Type_p116.html&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&#xD;
Never again will I make the simple into the complex. Something of true value does&#xD;
not become more valuable because it becomes complicated. - Donald Curtis &#xD;
&lt;br&gt;&lt;a href="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/TheLostArtofSimplicity_2E90/image_48.png"&gt;&lt;img style="border-right-width: 0px; margin: 5px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/TheLostArtofSimplicity_2E90/image_thumb_23.png" width="354" height="266"&gt;&lt;/img&gt;&lt;/a&gt;&lt;p&gt;&#xD;
One of the biggest problems is that we try to, for a large number of reasons, try&#xD;
to boil the ocean with our applications. When we build out our project plan and it’s&#xD;
going to be an 18 month cycle before the users get a new version, they are going to&#xD;
go to battle tooth and nail to get their feature request on the docket because they&#xD;
know that if they are not able to get it in this release, it’s going to be at least&#xD;
36 months out. All of these features crammed into a release adds not only a lot of&#xD;
complexity but a lot of risk to the endeavor. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
We have to get past the misperception that features equal value. Features do not equal&#xD;
value. Solving people’s problems equals value. The amount of complexity and risk that&#xD;
we add with these massive project plans hurt out ability to solve someone’s problem&#xD;
in a reasonable time frame. &#xD;
&lt;/p&gt;&lt;p&gt;&lt;a href="http://hikingartist.com/animals_g58-Fishing_type_p112.html"&gt;http://hikingartist.com/animals_g58-Fishing_type_p112.html&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/Willard_Gibbs"&gt;http://en.wikipedia.org/wiki/Willard_Gibbs&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&#xD;
The ability to simplify means to eliminate the unnecessary so that the necessary may&#xD;
speak. - Hans Hofmann &#xD;
&lt;br&gt;&lt;a href="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/TheLostArtofSimplicity_2E90/image_50.png"&gt;&lt;img style="border-right-width: 0px; margin: 5px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/TheLostArtofSimplicity_2E90/image_thumb_24.png" width="354" height="268"&gt;&lt;/img&gt;&lt;/a&gt;&lt;p&gt;&#xD;
You need to start small. Even if you know that the end game is far bigger, what’s&#xD;
that first step? What’s the minimal set of features that you need to get started?&#xD;
This is a struggle for a lot of people as we all want to go for the big vision. The&#xD;
natural tendency is to think that more is better but in a lot of cases, more just&#xD;
gets in the way of success. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
This is a core concepts that groups like 37 Signals have held. Their motto is that&#xD;
the first order of business is to get running and start building a customer base.&#xD;
You can worry about scaling later. But if you spend too much time worrying about scaling&#xD;
up front, you’ll never get out there to build the customer base in the first place. &#xD;
&lt;/p&gt;&lt;p&gt;&lt;a href="http://hikingartist.com/meetings_g55-Fools_can_t_you_see_the_bird..._p12.html"&gt;http://hikingartist.com/meetings_g55-Fools_can_t_you_see_the_bird..._p12.html&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&#xD;
Making the simple complicated is commonplace; making the complicated simple, awesomely&#xD;
simple, that’s creativity - Charles Mingus &#xD;
&lt;br&gt;&lt;a href="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/TheLostArtofSimplicity_2E90/image_52.png"&gt;&lt;img style="border-right-width: 0px; margin: 5px 5px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/TheLostArtofSimplicity_2E90/image_thumb_25.png" width="354" height="268"&gt;&lt;/img&gt;&lt;/a&gt;&lt;p&gt;&#xD;
On the other side of the coin, you need to have a clear concept of the future as you&#xD;
are getting started. I often see applications that are built with no concept future&#xD;
requirements and accidentally build in roadblocks to success. There are a lot of simple&#xD;
things that you can do that will future proof your application to some degree. It’s&#xD;
not hard to build in, if you start from the beginning with a tiered and separated&#xD;
architecture so that you can replace bottle necks if they start to pose a problem. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
This is sometimes a hard balance to hit but it’s an important one to tackle. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
There are a lot of straight forward things you can do such as adopting some of the&#xD;
great architectural patterns such as MVC (Model View Controller) or MVP (Model View&#xD;
Presenter) combined with great practices such as Test Driven Development (TDD). TDD&#xD;
is more than just building regression tests. It forces you to design and build your&#xD;
application in a modular fashion that allow you to make changes and modifications&#xD;
to your application quickly and with confidence. MVC and MVP are architectural patterns&#xD;
that work well with TDD and provide for great separation of concerns to further provide&#xD;
the agility that you need to grow and scale your application over time. &#xD;
&lt;/p&gt;&lt;p&gt;&lt;a href="http://hikingartist.com/meetings_g55-Not_quite_ready_p7.html"&gt;http://hikingartist.com/meetings_g55-Not_quite_ready_p7.html&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/Hans_Hofmann"&gt;http://en.wikipedia.org/wiki/Hans_Hofmann&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&#xD;
When thought is too weak to be simply expressed, it's clear proof that it should be&#xD;
rejected - Luc De Clapiers &#xD;
&lt;br&gt;&lt;a href="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/TheLostArtofSimplicity_2E90/image_54.png"&gt;&lt;img style="border-right-width: 0px; margin: 5px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/TheLostArtofSimplicity_2E90/image_thumb_26.png" width="354" height="268"&gt;&lt;/img&gt;&lt;/a&gt;&lt;p&gt;&lt;a href="http://hikingartist.com/Peopletypes_g54-The_engineer_p121.html"&gt;http://hikingartist.com/Peopletypes_g54-The_engineer_p121.html&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/Luc_de_Clapiers,_marquis_de_Vauvenargues"&gt;http://en.wikipedia.org/wiki/Luc_de_Clapiers,_marquis_de_Vauvenargues&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&#xD;
The whole is simpler than the sum of its parts. - Willard Gibbs &#xD;
&lt;br&gt;&lt;a href="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/TheLostArtofSimplicity_2E90/image_56.png"&gt;&lt;img style="border-right-width: 0px; margin: 5px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/TheLostArtofSimplicity_2E90/image_thumb_27.png" width="354" height="266"&gt;&lt;/img&gt;&lt;/a&gt;&lt;p&gt;&#xD;
None of this means that I’m not solving complex problems. It just means that I’m layering&#xD;
simple solution on top of simple solution to solve those complex problems. &#xD;
&lt;/p&gt;&lt;p&gt;&lt;a href="http://hikingartist.com/Free_print_versions_g79-Building_bridges_p747.html"&gt;http://hikingartist.com/Free_print_versions_g79-Building_bridges_p747.html&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&#xD;
The first requirement for an exemplary user experience is to meet the exact needs&#xD;
of the customer, without fuss or bother. Next comes simplicity and elegance that produce&#xD;
products that are a joy to own, a joy to use. True user experience goes far beyond&#xD;
giving customers what they say they want, or providing checklist features. - Nielsen&#xD;
Norman Group &#xD;
&lt;br&gt;&lt;a href="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/TheLostArtofSimplicity_2E90/image_58.png"&gt;&lt;img style="border-right-width: 0px; margin: 5px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/TheLostArtofSimplicity_2E90/image_thumb_28.png" width="354" height="268"&gt;&lt;/img&gt;&lt;/a&gt;&lt;p&gt;&#xD;
So where to from here? &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
As I look into the future, I see a world where we are working hand in hand with our&#xD;
users to solve their real needs rather than reacting to what they say that they want&#xD;
and confusing checklists of features with value. I dream of the day when we are able&#xD;
to respond to the users needs as quickly as we can get them to express those needs&#xD;
to us to the point of being able to forecast and proactively provide exactly the functionality&#xD;
that the user needs, nothing more, when they need and not a moment before they do. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
To do that, we need to forgo our egos, our love of complexity and our die hard grip&#xD;
on our favorite technologies and focus on the user. &#xD;
&lt;/p&gt;&lt;p&gt;&lt;a href="http://hikingartist.com/meetings_g55-The_observer_type_p135.html"&gt;http://hikingartist.com/meetings_g55-The_observer_type_p135.html&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&#xD;
Go confidently in the direction of your dreams! Live the life you've imagined. As&#xD;
you simplify your life, the laws of the universe will be simpler. - Henry David Thoreau &#xD;
&lt;br&gt;&lt;a href="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/TheLostArtofSimplicity_2E90/image_60.png"&gt;&lt;img style="border-right-width: 0px; margin: 5px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/TheLostArtofSimplicity_2E90/image_thumb_29.png" width="354" height="266"&gt;&lt;/img&gt;&lt;/a&gt;&lt;p&gt;&#xD;
You call to action is to go to war against complexity. Stand up for simplicity. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
Take the extra time that it is going to take to build the uncombined solution that&#xD;
has clarity of expression. Don’t confuse simple with lack of sophistication. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
Focus on your user and their needs. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
  &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
As you do this. As you take on this challenge and “as you simplify your life, the&#xD;
laws of the universe will be simpler”. &#xD;
&lt;/p&gt;&lt;p&gt;&lt;a href="http://hikingartist.com/Motivation_g56-The_gatekeeper_type_p48.html"&gt;http://hikingartist.com/Motivation_g56-The_gatekeeper_type_p48.html&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&#xD;
All artwork used in this presentation is licensed under Creative Commons by Frits&#xD;
Ahlefeldt, aka hikingartist Support his amazing craft at &lt;a href="http://hikingartist.com"&gt;http://hikingartist.com&lt;/a&gt;&lt;br&gt;&lt;a href="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/TheLostArtofSimplicity_2E90/image_62.png"&gt;&lt;img style="border-right-width: 0px; margin: 5px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/TheLostArtofSimplicity_2E90/image_thumb_30.png" width="354" height="265"&gt;&lt;/img&gt;&lt;/a&gt;&lt;p&gt;&#xD;
Before I finish, I need to say a quick thank you to Fritz Ahlefeldt. He’s a Danish&#xD;
artist with obvious talent. He publishes a large amount of his work under creative&#xD;
commons. If you like this art, you can see much more at http://www.hikingartist.com&#xD;
and support him and his amazing craft. &#xD;
&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&#xD;
The Lost Art of Simplicity Josh Holmes joshholmes.com &lt;a href="mailto:josh.holmes@microsoft.com"&gt;josh.holmes@microsoft.com&lt;/a&gt;&lt;br&gt;&lt;a href="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/TheLostArtofSimplicity_2E90/image_6.png"&gt;&lt;img style="border-right-width: 0px; margin: 5px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/TheLostArtofSimplicity_2E90/image_thumb_2.png" width="354" height="265"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&#xD;
I’m looking forward to evolving this talk as I move towards CodeStock and DevLink.&#xD;
I know that there was a really nice progression in just a week between &lt;a href="http://cinnug.org/cododn/default.aspx"&gt;Central&#xD;
Ohio Day of .NET&lt;/a&gt; and &lt;a href="http://www.kalamazoox.org/"&gt;Kalamazoo X&lt;/a&gt; as my&#xD;
message got a lot crisper and more direct based on a lot of great constructive advice&#xD;
I got from &lt;a href="http://mjeaton.net/"&gt;Michael Eaton&lt;/a&gt;, &lt;a href="http://mvwood.com"&gt;Michael&#xD;
Wood&lt;/a&gt;, &lt;a href="http://frazzleddad.blogspot.com/"&gt;Jim Homes&lt;/a&gt; and more. &#xD;
&lt;/p&gt;&lt;img width="0" height="0" src="http://www.joshholmes.com/blog/aggbug.ashx?id=cce3402c-1695-49e8-9c17-e3f9f842fa0d"&gt;&lt;/img&gt;&lt;br&gt;&lt;hr&gt;&lt;/hr&gt;&#xD;
This weblog is sponsored by &amp;lt;a href="http://www.joshholmes.com"&amp;gt;Josh Holmes&amp;lt;/a&amp;gt;. &#xD;
&lt;/body&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JoshHolmes?a=pQyxzfMMBRs:4rRNgCp6-rU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoshHolmes?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoshHolmes?a=pQyxzfMMBRs:4rRNgCp6-rU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoshHolmes?i=pQyxzfMMBRs:4rRNgCp6-rU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoshHolmes?a=pQyxzfMMBRs:4rRNgCp6-rU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoshHolmes?i=pQyxzfMMBRs:4rRNgCp6-rU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JoshHolmes/~4/pQyxzfMMBRs" height="1" width="1"/&gt;</description><comments>http://www.joshholmes.com/blog/CommentView,guid,cce3402c-1695-49e8-9c17-e3f9f842fa0d.aspx</comments><feedburner:origLink>http://www.joshholmes.com/blog/2009/04/29/TheLostArtOfSimplicity.aspx</feedburner:origLink></item><item><trackback:ping>http://www.joshholmes.com/blog/Trackback.aspx?guid=9a80b8ad-f930-43db-9e55-1e62987e17c8</trackback:ping><pingback:server>http://www.joshholmes.com/blog/pingback.aspx</pingback:server><pingback:target>http://www.joshholmes.com/blog/PermaLink,guid,9a80b8ad-f930-43db-9e55-1e62987e17c8.aspx</pingback:target><dc:creator>Josh Holmes</dc:creator><wfw:comment>http://www.joshholmes.com/blog/CommentView,guid,9a80b8ad-f930-43db-9e55-1e62987e17c8.aspx</wfw:comment><wfw:commentRss>http://www.joshholmes.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=9a80b8ad-f930-43db-9e55-1e62987e17c8</wfw:commentRss><title>Glimmer – A jQuery Designer</title><guid isPermaLink="false">http://www.joshholmes.com/blog/PermaLink,guid,9a80b8ad-f930-43db-9e55-1e62987e17c8.aspx</guid><link>http://feedproxy.google.com/~r/JoshHolmes/~3/5ZOWclHe6eM/GlimmerAJQueryDesigner.aspx</link><pubDate>Tue, 28 Apr 2009 18:46:40 GMT</pubDate><description>&lt;body xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;&lt;img style="margin: 5px; display: inline" align="left" src="http://visitmix.com/content/files/glim4s.png" width="292" height="218"&gt;&lt;/img&gt;I&#xD;
had heard about this effort a few weeks back but I’m thrilled that it’s public and&#xD;
I can talk about it now. &lt;a href="http://visitmix.com/about/karstenj"&gt;Karsten Januszewski&lt;/a&gt; and&#xD;
some of the other whiz kids on the &lt;a href="http://visitmix.com/"&gt;MIX&lt;/a&gt; team have&#xD;
put together a visual designer for &lt;a href="http://jquery.com"&gt;jQuery&lt;/a&gt; called &lt;a href="http://visitmix.com/lab/glimmer"&gt;Glimmer&lt;/a&gt;. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
Right now, they’ve got a number of design wizards that you can leverage but they’ve&#xD;
built a great plug-in model so that you can write your own for your favorite &lt;a href="http://ui.jquery.com/"&gt;jQuery&#xD;
UI&lt;/a&gt; plug-in. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
Check out their video on how to leverage &lt;a href="http://visitmix.com/lab/glimmer"&gt;Glimmer&lt;/a&gt; and&#xD;
how it all came to be. &#xD;
&lt;/p&gt;&lt;p&gt;&lt;object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="304" height="228"&gt;&lt;param name="source" value="http://channel9.msdn.com/App_Themes/default/VideoPlayer2009_02_24.xap"&gt;&lt;/param&gt;&lt;param name="initParams" value="m=http://mschannel9.vo.msecnd.net/o9/mix/labs/glimmer/glimmer.wmv,autostart=false,autohide=true,showembed=true, thumbnail=http://mschannel9.vo.msecnd.net/o9/mix/labs/glimmer/glimmerVideo.jpg, postid=0"&gt;&lt;/param&gt;&lt;param name="background" value="#00FFFFFF"&gt;&lt;/param&gt;&lt;a href="http://go.microsoft.com/fwlink/?LinkID=124807" style="text-decoration: none;"&gt;&lt;img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style: none"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/object&gt;&lt;/p&gt;&lt;p&gt;&#xD;
I’m really geeked and am looking forward to using this in my next web dev projects… &#xD;
&lt;/p&gt;&lt;img width="0" height="0" src="http://www.joshholmes.com/blog/aggbug.ashx?id=9a80b8ad-f930-43db-9e55-1e62987e17c8"&gt;&lt;/img&gt;&lt;br&gt;&lt;hr&gt;&lt;/hr&gt;&#xD;
This weblog is sponsored by &amp;lt;a href="http://www.joshholmes.com"&amp;gt;Josh Holmes&amp;lt;/a&amp;gt;. &#xD;
&lt;/body&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JoshHolmes?a=5ZOWclHe6eM:kZBBqx5tetI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoshHolmes?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoshHolmes?a=5ZOWclHe6eM:kZBBqx5tetI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoshHolmes?i=5ZOWclHe6eM:kZBBqx5tetI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoshHolmes?a=5ZOWclHe6eM:kZBBqx5tetI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoshHolmes?i=5ZOWclHe6eM:kZBBqx5tetI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JoshHolmes/~4/5ZOWclHe6eM" height="1" width="1"/&gt;</description><comments>http://www.joshholmes.com/blog/CommentView,guid,9a80b8ad-f930-43db-9e55-1e62987e17c8.aspx</comments><feedburner:origLink>http://www.joshholmes.com/blog/2009/04/28/GlimmerAJQueryDesigner.aspx</feedburner:origLink></item><item><trackback:ping>http://www.joshholmes.com/blog/Trackback.aspx?guid=2ed09b8f-8381-47f8-bd2a-f22ad69e020a</trackback:ping><pingback:server>http://www.joshholmes.com/blog/pingback.aspx</pingback:server><pingback:target>http://www.joshholmes.com/blog/PermaLink,guid,2ed09b8f-8381-47f8-bd2a-f22ad69e020a.aspx</pingback:target><dc:creator>Josh Holmes</dc:creator><wfw:comment>http://www.joshholmes.com/blog/CommentView,guid,2ed09b8f-8381-47f8-bd2a-f22ad69e020a.aspx</wfw:comment><wfw:commentRss>http://www.joshholmes.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=2ed09b8f-8381-47f8-bd2a-f22ad69e020a</wfw:commentRss><slash:comments>1</slash:comments><title>Creating a Simple Silverlight Countdown Blog badge</title><guid isPermaLink="false">http://www.joshholmes.com/blog/PermaLink,guid,2ed09b8f-8381-47f8-bd2a-f22ad69e020a.aspx</guid><link>http://feedproxy.google.com/~r/JoshHolmes/~3/pPWqOqKD3rc/CreatingASimpleSilverlightCountdownBlogBadge.aspx</link><pubDate>Tue, 28 Apr 2009 03:37:24 GMT</pubDate><description>&lt;body xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;&lt;a href="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/CreatingaSimpleSilverlightCountdownBlogb_14954/image_2.png"&gt;&lt;img style="border-right-width: 0px; margin: 5px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" align="left" src="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/CreatingaSimpleSilverlightCountdownBlogb_14954/image_thumb.png" width="104" height="204"&gt;&lt;/img&gt;&lt;/a&gt; I’m&#xD;
going to be speaking at &lt;a href="http://www.riapalooza.com/"&gt;RIAPalooza&lt;/a&gt; in about&#xD;
two weeks, well more specifically at the time of this writing it’s 10 days, 12 hours,&#xD;
48 minutes and 45 seconds. :) &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
I’m going to be tag teaming with &lt;a href="http://blogs.digitalprimates.net/codeslinger/"&gt;Mike&#xD;
Labriola&lt;/a&gt; again talking about “10 questions about RIA you haven’t had the courage&#xD;
to ask”. We’ve got a short list of questions but are hoping to get some questions&#xD;
from the crowd as well. If you happen to have any questions, feel free to shoot them&#xD;
to me in the comments section on this post. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
Anyways, we were discussing different ways to get the word out about RIAPalooza and&#xD;
someone mentioned that we didn’t have have a blog badge so I decided to create one. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
I started by grabbing some art from the &lt;a href="http://www.riapalooza.com/"&gt;RIAPalooza&lt;/a&gt; web&#xD;
site. I started out in Expression Blend with a simple Silverlight project. Here are&#xD;
the steps that I took. &#xD;
&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&#xD;
Resize the Page.xaml user control to 100x200 to fit the blog badge size. &#xD;
&lt;/li&gt;&lt;li&gt;&#xD;
Add the wood background that I grabbed from the &lt;a href="http://www.riapalooza.com/"&gt;RIAPalooza&lt;/a&gt; web&#xD;
site trimmed down to the blog badge size. &#xD;
&lt;/li&gt;&lt;li&gt;&#xD;
Paste in the two other images, one for the logo (referred to as i and one for a a&#xD;
free t-shirt offer. &#xD;
&lt;/li&gt;&lt;li&gt;&#xD;
Animate the two images to wiggle, spin, wiggle, wait, wiggle, spin, wiggle, wait,&#xD;
reverse. &#xD;
&lt;ul&gt;&lt;li&gt;&#xD;
 &lt;a href="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/CreatingaSimpleSilverlightCountdownBlogb_14954/image_10.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="image" border="0" alt="image" src="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/CreatingaSimpleSilverlightCountdownBlogb_14954/image_thumb_4.png" width="244" height="106"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br&gt;&#xD;
To do this, I opened a timeline and started by rotating the first image -6 degrees&#xD;
and then a frame later rotating it to 6 degrees and then a frame later back to 0.&#xD;
This gives the images a nice little wiggle and catches the viewer’s eye without being&#xD;
too annoying. Well, I don’t think it’s too annoying but you can tell me… &#xD;
&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/CreatingaSimpleSilverlightCountdownBlogb_14954/image_6.png"&gt;&lt;img style="border-right-width: 0px; margin: 5px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/CreatingaSimpleSilverlightCountdownBlogb_14954/image_thumb_2.png" width="244" height="169"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br&gt;&#xD;
Then I kicked forward 2 seconds and did the wiggle again in preparation of swapping&#xD;
to two images. The wiggle makes a nice little transition before the action starts. &#xD;
&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/CreatingaSimpleSilverlightCountdownBlogb_14954/image_8.png"&gt;&lt;img style="border-right-width: 0px; margin: 5px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/CreatingaSimpleSilverlightCountdownBlogb_14954/image_thumb_3.png" width="244" height="106"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br&gt;&#xD;
At the end of the wiggle, I spun the image on it’s X axis over the span of half a&#xD;
second. That’s accomplished by setting the X Skew to zero. &#xD;
&lt;/li&gt;&lt;li&gt;&#xD;
On the same frame that the first logo hits an X Skew of zero, I make the other image&#xD;
visible with it’s X Skew to zero an proceed to transform it’s skew to 1 (normal) over&#xD;
the course of a half second. &#xD;
&lt;/li&gt;&lt;li&gt;&#xD;
Then I wiggled the t-shirt offer image in the same manner that I did the first logo. &#xD;
&lt;/li&gt;&lt;li&gt;&#xD;
Now, back in the code, I set a few properties and started the animation. &lt;pre class="code"&gt;AnimateLogos.AutoReverse = &lt;span style="color: blue"&gt;true&lt;/span&gt;;&#xD;
AnimateLogos.RepeatBehavior = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;RepeatBehavior&lt;/span&gt;(1000);&#xD;
AnimateLogos.Begin();&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&#xD;
Now that the logos are moving, I needed a link to the site. Simple enough using a&#xD;
HyperLinkButton. &#xD;
&lt;/li&gt;&lt;li&gt;&#xD;
Last thing I needed was to provide some type of count down. At first I just used a&#xD;
couple of labels and set the text. &#xD;
&lt;ul&gt;&lt;li&gt;&#xD;
First, I used a timer set to go every second and set the time&lt;br&gt;&#xD;
_timer = &lt;span style="color: blue"&gt;new&lt;/span&gt;&lt;span style="color: #2b91af"&gt;Timer&lt;/span&gt;(&lt;span style="color: blue"&gt;new&lt;/span&gt;&lt;span style="color: #2b91af"&gt;TimerCallback&lt;/span&gt;(Timer_Tick), &lt;span style="color: blue"&gt;null&lt;/span&gt;,&#xD;
0, 1000); &#xD;
&lt;/li&gt;&lt;li&gt;&#xD;
Next I used the dispatch object to work on the UI thread as follows:&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;public&#xD;
void &lt;/span&gt;Timer_Tick(&lt;span style="color: blue"&gt;object &lt;/span&gt;state) { Dispatcher.BeginInvoke(()&#xD;
=&amp;gt; { &lt;span style="color: blue"&gt;try &lt;/span&gt;{ &lt;span style="color: #2b91af"&gt;DateTime &lt;/span&gt;launchDate&#xD;
= &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;DateTime&lt;/span&gt;(2009,&#xD;
5, 8, 8, 0, 0).ToUniversalTime(); &lt;span style="color: #2b91af"&gt;TimeSpan &lt;/span&gt;span&#xD;
= launchDate.Subtract(&lt;span style="color: #2b91af"&gt;DateTime&lt;/span&gt;.Now.ToUniversalTime());&#xD;
txtDays.Text = &lt;span style="color: blue"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #a31515"&gt;"{0}&#xD;
Days"&lt;/span&gt;, span.Days); ... } &lt;span style="color: blue"&gt;catch &lt;/span&gt;{ &lt;span style="color: green"&gt;//Eat&#xD;
all errors. We'll get another chance in a second... &lt;/span&gt;} } ); }&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&#xD;
There are a couple of things to notice about the code above. First, I just used everything&#xD;
as UniversalTime. I thought about trying to do the whole timezone thing but realized&#xD;
that it didn’t matter for a countdown because as long as everything was in the same&#xD;
timezone the math would be right. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
Second, notice that I’m eating all of the errors in the timer. The basic error that&#xD;
I can get from this code is a threading issue and since this is low priority code,&#xD;
I didn’t care about the threading issue. It’s not like there’s a real recovery path&#xD;
other than trying again in a second. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
Now that I had the simple countdown and badge done, I decided that I didn’t like the&#xD;
flat labels and wanted a real clock style count down. To accomplish this I started&#xD;
a Silverlight FlipClock project to build a reusable clock face. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
Since I was creating a flipping clock with a separate top and bottom, it made sense&#xD;
to create a control to encapsulate those bits in user controls that I could reuse.&#xD;
There were two interesting parts here. First, how to get the text to cut off at the&#xD;
top and second, how to get the text to scale correctly with the number if we resized&#xD;
it. &#xD;
&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/CreatingaSimpleSilverlightCountdownBlogb_14954/image_12.png"&gt;&lt;img style="border-right-width: 0px; margin: 5px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" align="left" src="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/CreatingaSimpleSilverlightCountdownBlogb_14954/image_thumb_5.png" width="191" height="244"&gt;&lt;/img&gt;&lt;/a&gt; The&#xD;
first issue was solved by using a brush that cut off to an opacity of zero just under&#xD;
halfway. I did that on both the background and the textbox. The whole gradient is&#xD;
actually made up of three stop points. Two set to be the same color and opacity of&#xD;
100% and a third that is set to the same color but opacity of zero. This third stop&#xD;
is just a hair further down than the second. The purpose of the second stop is to&#xD;
keep it from fading from top to bottom rather than having the hard like that I desired. &#xD;
&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;LinearGradientBrush &lt;/span&gt;&lt;span style="color: red"&gt;EndPoint&lt;/span&gt;&lt;span style="color: blue"&gt;="0.5,1" &lt;/span&gt;&lt;span style="color: red"&gt;StartPoint&lt;/span&gt;&lt;span style="color: blue"&gt;="0.5,0"&amp;gt;&#xD;
&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;GradientStop &lt;/span&gt;&lt;span style="color: red"&gt;Color&lt;/span&gt;&lt;span style="color: blue"&gt;="#FFFFFFFF" &lt;/span&gt;&lt;span style="color: red"&gt;Offset&lt;/span&gt;&lt;span style="color: blue"&gt;="0"/&amp;gt;&#xD;
&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;GradientStop &lt;/span&gt;&lt;span style="color: red"&gt;Color&lt;/span&gt;&lt;span style="color: blue"&gt;="#FFFFFFFF" &lt;/span&gt;&lt;span style="color: red"&gt;Offset&lt;/span&gt;&lt;span style="color: blue"&gt;="0.48"/&amp;gt;&#xD;
&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;GradientStop &lt;/span&gt;&lt;span style="color: red"&gt;Color&lt;/span&gt;&lt;span style="color: blue"&gt;="#00FFFFFF" &lt;/span&gt;&lt;span style="color: red"&gt;Offset&lt;/span&gt;&lt;span style="color: blue"&gt;="0.49"/&amp;gt;&#xD;
&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;LinearGradientBrush&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;&#xD;
The second issue was solved thanks to &lt;a href="http://www.galasoft.ch/"&gt;Laurent Bugnion&lt;/a&gt;.&#xD;
He pointed out that although Silverlight doesn’t have a scalable font, there is a&#xD;
VIewbox in the Silverlight Control Toolkit on Codeplex that will scale anything inside&#xD;
itself correctly. &#xD;
&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;controls&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;Viewbox &lt;/span&gt;&lt;span style="color: red"&gt;Height&lt;/span&gt;&lt;span style="color: blue"&gt;="Auto" &lt;/span&gt;&lt;span style="color: red"&gt;HorizontalAlignment&lt;/span&gt;&lt;span style="color: blue"&gt;="Stretch" &lt;/span&gt;&lt;span style="color: red"&gt;Margin&lt;/span&gt;&lt;span style="color: blue"&gt;="0,0,0,0" &lt;/span&gt;&lt;span style="color: red"&gt;VerticalAlignment&lt;/span&gt;&lt;span style="color: blue"&gt;="Stretch" &lt;/span&gt;&lt;span style="color: red"&gt;Width&lt;/span&gt;&lt;span style="color: blue"&gt;="Auto" &lt;/span&gt;&lt;span style="color: red"&gt;Content&lt;/span&gt;&lt;span style="color: blue"&gt;="Viewbox" &lt;/span&gt;&lt;span style="color: red"&gt;Stretch&lt;/span&gt;&lt;span style="color: blue"&gt;="Fill"&amp;gt;&#xD;
&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Grid &lt;/span&gt;&lt;span style="color: red"&gt;x&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: red"&gt;Name&lt;/span&gt;&lt;span style="color: blue"&gt;="LayoutRoot" &lt;/span&gt;&lt;span style="color: red"&gt;Background&lt;/span&gt;&lt;span style="color: blue"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515"&gt;x&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;Null&lt;/span&gt;&lt;span style="color: blue"&gt;}"&amp;gt; &lt;/span&gt;&lt;span style="color: blue"&gt;.&#xD;
. . &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Grid&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&#xD;
&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;controls&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;Viewbox&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;p&gt;&#xD;
I added a simple property to set the value in the textbox. &#xD;
&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;public int &lt;/span&gt;Value { &lt;span style="color: blue"&gt;get &lt;/span&gt;{ &lt;span style="color: blue"&gt;return&#xD;
int&lt;/span&gt;.Parse(txtNumber.Text); } &lt;span style="color: blue"&gt;set &lt;/span&gt;{ txtNumber.Text&#xD;
= &lt;span style="color: blue"&gt;value&lt;/span&gt;.ToString(); } }&lt;/pre&gt;&lt;p&gt;&#xD;
Then I just played with the styling a little with a slight highlight on the top and&#xD;
the like. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
Next, I created a FlippingNumber control that would be the base for the various numbers&#xD;
on the clock. To make it look right,  I actually needed 4 sections to the control.&#xD;
Two to show the current number and two to show the next number and we flip between&#xD;
them. I simply put two of the top and two of the bottom number controls one the page.&#xD;
The flip was just an animation similar to the flipping of the two images in the top&#xD;
of the badge. The only difference is that I skewed the controls a little to give it&#xD;
a slight 3d effect. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
Once that was done, the rest of the number was built in code. &#xD;
&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;public &lt;/span&gt;FlippingNumber() { InitializeComponent();&#xD;
FlipDown.Completed += &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;EventHandler&lt;/span&gt;(FlipDown_Completed);&#xD;
} &lt;span style="color: blue"&gt;void &lt;/span&gt;FlipDown_Completed(&lt;span style="color: blue"&gt;object &lt;/span&gt;sender, &lt;span style="color: #2b91af"&gt;EventArgs &lt;/span&gt;e)&#xD;
{ numBottomBack.Value = _val; numTopFlip.Value = _val; } &lt;span style="color: blue"&gt;int &lt;/span&gt;_val&#xD;
= -9999; &lt;span style="color: blue"&gt;public int &lt;/span&gt;Value { &lt;span style="color: blue"&gt;get &lt;/span&gt;{ &lt;span style="color: blue"&gt;return &lt;/span&gt;_val;&#xD;
} &lt;span style="color: blue"&gt;set &lt;/span&gt;{ &lt;span style="color: blue"&gt;if &lt;/span&gt;(&lt;span style="color: blue"&gt;value &lt;/span&gt;!=&#xD;
_val) { _val = &lt;span style="color: blue"&gt;value&lt;/span&gt;; numBottomFlip.Value = _val;&#xD;
numTopBack.Value = _val; FlipDown.Begin(); } } }&lt;/pre&gt;&lt;p&gt;&#xD;
The other property that I added was so that the clock could adjust the speed at which&#xD;
the number flipped. &#xD;
&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;public double &lt;/span&gt;SpeedRatio { &lt;span style="color: blue"&gt;get &lt;/span&gt;{ &lt;span style="color: blue"&gt;return &lt;/span&gt;FlipDown.SpeedRatio;&#xD;
} &lt;span style="color: blue"&gt;set &lt;/span&gt;{ FlipDown.SpeedRatio = &lt;span style="color: blue"&gt;value&lt;/span&gt;;&#xD;
} }&lt;/pre&gt;&lt;p&gt;&#xD;
Finally, I was ready to piece together the clock. That was a simple matter of placing&#xD;
6 of the flipping number controls on the clock face. All that was left was set the&#xD;
time on the clock based on a value in the passed in TimeSpan. &#xD;
&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: #2b91af"&gt;TimeSpan &lt;/span&gt;_timeSpan; &lt;span style="color: blue"&gt;public &lt;/span&gt;&lt;span style="color: #2b91af"&gt;TimeSpan &lt;/span&gt;TimeSpan&#xD;
{ &lt;span style="color: blue"&gt;get &lt;/span&gt;{ &lt;span style="color: blue"&gt;return &lt;/span&gt;_timeSpan;&#xD;
} &lt;span style="color: blue"&gt;set &lt;/span&gt;{ _timeSpan = &lt;span style="color: blue"&gt;value&lt;/span&gt;;&#xD;
numSecondOne.Value = FirstCharacter(_timeSpan.Seconds); numSecondTwo.Value = SecondCharacter(_timeSpan.Seconds);&#xD;
numMinuteOne.Value = FirstCharacter(_timeSpan.Minutes); numMinuteTwo.Value = SecondCharacter(_timeSpan.Minutes);&#xD;
numHourOne.Value = FirstCharacter(_timeSpan.Hours); numHourTwo.Value = SecondCharacter(_timeSpan.Hours);&#xD;
} } &lt;span style="color: blue"&gt;private int &lt;/span&gt;FirstCharacter(&lt;span style="color: blue"&gt;int &lt;/span&gt;num)&#xD;
{ &lt;span style="color: blue"&gt;string &lt;/span&gt;s = &lt;span style="color: blue"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #a31515"&gt;"{0:00}"&lt;/span&gt;,&#xD;
num); &lt;span style="color: blue"&gt;return int&lt;/span&gt;.Parse(s.Substring(1, 1)); } &lt;span style="color: blue"&gt;private&#xD;
int &lt;/span&gt;SecondCharacter(&lt;span style="color: blue"&gt;int &lt;/span&gt;num) { &lt;span style="color: blue"&gt;string &lt;/span&gt;s&#xD;
= &lt;span style="color: blue"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #a31515"&gt;"{0:00}"&lt;/span&gt;,&#xD;
num); &lt;span style="color: blue"&gt;return int&lt;/span&gt;.Parse(s.Substring(0, 1)); }&lt;/pre&gt;&lt;p&gt;&#xD;
The last thing on the badge that I did was change the timer control code on the overall&#xD;
blog badge to pass the time span into the clock face rather than parsing it into textboxes. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
Now I wanted people to be able to use it from their own blog. To allow that to happen,&#xD;
I needed a put together a cross domain policy via the clientaccesspolicy.xml file. &#xD;
&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color: #a31515"&gt;xml &lt;/span&gt;&lt;span style="color: red"&gt;version&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;1.0&lt;/span&gt;" &lt;span style="color: red"&gt;encoding&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;utf-8&lt;/span&gt;"&lt;span style="color: blue"&gt;?&amp;gt;&#xD;
&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;access-policy&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&#xD;
&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;cross-domain-access&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&#xD;
&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;policy&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&#xD;
&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;allow-from &lt;/span&gt;&lt;span style="color: red"&gt;http-request-headers&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;*&lt;/span&gt;"&lt;span style="color: blue"&gt;&amp;gt;&#xD;
&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;domain &lt;/span&gt;&lt;span style="color: red"&gt;uri&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;*&lt;/span&gt;"&lt;span style="color: blue"&gt;/&amp;gt;&#xD;
&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;allow-from&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&#xD;
&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;grant-to&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&#xD;
&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;resource &lt;/span&gt;&lt;span style="color: red"&gt;path&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;/resources/SilverCountDown.xap&lt;/span&gt;" &lt;span style="color: red"&gt;include-subpaths&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;true&lt;/span&gt;"&lt;span style="color: blue"&gt;/&amp;gt;&#xD;
&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;grant-to&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&#xD;
&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;policy&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&#xD;
&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;cross-domain-access&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&#xD;
&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;access-policy&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;&#xD;
Notice that I’m allowing access from any domain but restricting access to only load&#xD;
the specific xap file. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
Anyone who wants to put it on their blog can do so simply by leveraging the following&#xD;
object tag.&#xD;
&lt;/p&gt;&lt;div style="margin: 5px; float: left" id="silverlightControlHost"&gt;&lt;object data="data:application/x-silverlight," type="application/x-silverlight-2" width="100px" height="200px"&gt;&lt;param name="source" value="http://www.joshholmes.com/resources/SilverCountDown.xap"&gt;&lt;/param&gt;&lt;param name="background" value="white"&gt;&lt;/param&gt;&lt;param name="minRuntimeVersion" value="2.0.31005.0"&gt;&lt;/param&gt;&lt;param name="autoUpgrade" value="true"&gt;&lt;/param&gt;&lt;a href="http://go.microsoft.com/fwlink/?LinkID=124807" style="text-decoration: none;"&gt;&lt;img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style: none"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/object&gt;&lt;iframe style="border-right-width: 0px; width: 0px; border-top-width: 0px; border-bottom-width: 0px; height: 0px; visibility: hidden; border-left-width: 0px"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;div &lt;/span&gt;&lt;span style="color: red"&gt;id&lt;/span&gt;&lt;span style="color: blue"&gt;="silverlightControlHost"&amp;gt;&#xD;
&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;object &lt;/span&gt;&lt;span style="color: red"&gt;data&lt;/span&gt;&lt;span style="color: blue"&gt;="data:application/x-silverlight," &#xD;
&lt;br&gt;&lt;/span&gt;&lt;span style="color: red"&gt;type&lt;/span&gt;&lt;span style="color: blue"&gt;="application/x-silverlight-2" &lt;/span&gt;&lt;span style="color: red"&gt;width&lt;/span&gt;&lt;span style="color: blue"&gt;="100px" &lt;/span&gt;&lt;span style="color: red"&gt;height&lt;/span&gt;&lt;span style="color: blue"&gt;="200px"&amp;gt;&#xD;
&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;param &lt;/span&gt;&lt;span style="color: red"&gt;name&lt;/span&gt;&lt;span style="color: blue"&gt;="source" &lt;/span&gt;&lt;span style="color: red"&gt;value&lt;/span&gt;&lt;span style="color: blue"&gt;="http://www.joshholmes.com/resources/SilverCountDown.xap"/&amp;gt;&#xD;
&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;param &lt;/span&gt;&lt;span style="color: red"&gt;name&lt;/span&gt;&lt;span style="color: blue"&gt;="background" &lt;/span&gt;&lt;span style="color: red"&gt;value&lt;/span&gt;&lt;span style="color: blue"&gt;="white"&#xD;
/&amp;gt; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;param &lt;/span&gt;&lt;span style="color: red"&gt;name&lt;/span&gt;&lt;span style="color: blue"&gt;="minRuntimeVersion" &lt;/span&gt;&lt;span style="color: red"&gt;value&lt;/span&gt;&lt;span style="color: blue"&gt;="2.0.31005.0"&#xD;
/&amp;gt; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;param &lt;/span&gt;&lt;span style="color: red"&gt;name&lt;/span&gt;&lt;span style="color: blue"&gt;="autoUpgrade" &lt;/span&gt;&lt;span style="color: red"&gt;value&lt;/span&gt;&lt;span style="color: blue"&gt;="true"&#xD;
/&amp;gt; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;a &lt;/span&gt;&lt;span style="color: red"&gt;href&lt;/span&gt;&lt;span style="color: blue"&gt;="http://go.microsoft.com/fwlink/?LinkID=124807" &lt;/span&gt;&lt;span style="color: red"&gt;style&lt;/span&gt;&lt;span style="color: blue"&gt;="&lt;/span&gt;&lt;span style="color: red"&gt;text-decoration&lt;/span&gt;: &lt;span style="color: blue"&gt;none&lt;/span&gt;;&lt;span style="color: blue"&gt;"&amp;gt;&#xD;
&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;img &lt;/span&gt;&lt;span style="color: red"&gt;src&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;a href="http://go.microsoft.com/fwlink/?LinkId=108181"&gt;http://go.microsoft.com/fwlink/?LinkId=108181&lt;/a&gt;&lt;br&gt;&lt;/span&gt;&lt;span style="color: red"&gt; alt&lt;/span&gt;&lt;span style="color: blue"&gt;="Get Microsoft&#xD;
Silverlight" &lt;/span&gt;&lt;span style="color: red"&gt;style&lt;/span&gt;&lt;span style="color: blue"&gt;="&lt;/span&gt;&lt;span style="color: red"&gt;border-style&lt;/span&gt;: &lt;span style="color: blue"&gt;none"/&amp;gt;&#xD;
&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;a&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt; &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;object&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&#xD;
&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;iframe &lt;/span&gt;&lt;span style="color: red"&gt;style&lt;/span&gt;&lt;span style="color: blue"&gt;='&lt;/span&gt;&lt;span style="color: red"&gt;visibility&lt;/span&gt;:&lt;span style="color: blue"&gt;hidden&lt;/span&gt;;&lt;span style="color: red"&gt;height&lt;/span&gt;:&lt;span style="color: blue"&gt;0&lt;/span&gt;;&lt;span style="color: red"&gt;width&lt;/span&gt;:&lt;span style="color: blue"&gt;0&lt;/span&gt;;&lt;span style="color: red"&gt;border&lt;/span&gt;:&lt;span style="color: blue"&gt;0px'&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;iframe&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&#xD;
&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;div&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;&lt;/p&gt;&#xD;
Feel free to place the badge on your own blog to help promote RIAPalooza – When this&#xD;
year finishes, I’ll update the counter with next years dates as soon as we know it…&#xD;
:) &#xD;
&lt;p&gt;&lt;/p&gt;&lt;p&gt;&#xD;
Also – I put the code up at &lt;a href="http://www.joshholmes.com/resources/silvercountdown.zip"&gt;http://www.joshholmes.com/resources/silvercountdown.zip&lt;/a&gt;.&#xD;
Feel free to take it and play with it. &#xD;
&lt;/p&gt;&lt;img width="0" height="0" src="http://www.joshholmes.com/blog/aggbug.ashx?id=2ed09b8f-8381-47f8-bd2a-f22ad69e020a"&gt;&lt;/img&gt;&lt;br&gt;&lt;hr&gt;&lt;/hr&gt;&#xD;
This weblog is sponsored by &amp;lt;a href="http://www.joshholmes.com"&amp;gt;Josh Holmes&amp;lt;/a&amp;gt;. &#xD;
&lt;/body&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JoshHolmes?a=pPWqOqKD3rc:gOZSaFIedyo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoshHolmes?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoshHolmes?a=pPWqOqKD3rc:gOZSaFIedyo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoshHolmes?i=pPWqOqKD3rc:gOZSaFIedyo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoshHolmes?a=pPWqOqKD3rc:gOZSaFIedyo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoshHolmes?i=pPWqOqKD3rc:gOZSaFIedyo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JoshHolmes/~4/pPWqOqKD3rc" height="1" width="1"/&gt;</description><comments>http://www.joshholmes.com/blog/CommentView,guid,2ed09b8f-8381-47f8-bd2a-f22ad69e020a.aspx</comments><feedburner:origLink>http://www.joshholmes.com/blog/2009/04/28/CreatingASimpleSilverlightCountdownBlogBadge.aspx</feedburner:origLink></item><item><trackback:ping>http://www.joshholmes.com/blog/Trackback.aspx?guid=77167377-f49f-46c3-a3ab-f0daaca1a5b9</trackback:ping><pingback:server>http://www.joshholmes.com/blog/pingback.aspx</pingback:server><pingback:target>http://www.joshholmes.com/blog/PermaLink,guid,77167377-f49f-46c3-a3ab-f0daaca1a5b9.aspx</pingback:target><dc:creator>Josh Holmes</dc:creator><wfw:comment>http://www.joshholmes.com/blog/CommentView,guid,77167377-f49f-46c3-a3ab-f0daaca1a5b9.aspx</wfw:comment><wfw:commentRss>http://www.joshholmes.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=77167377-f49f-46c3-a3ab-f0daaca1a5b9</wfw:commentRss><slash:comments>2</slash:comments><title>Antidotal info on JavaScript Library Ext JS</title><guid isPermaLink="false">http://www.joshholmes.com/blog/PermaLink,guid,77167377-f49f-46c3-a3ab-f0daaca1a5b9.aspx</guid><link>http://feedproxy.google.com/~r/JoshHolmes/~3/QPUhuunIau8/AntidotalInfoOnJavaScriptLibraryExtJS.aspx</link><pubDate>Tue, 07 Apr 2009 22:47:57 GMT</pubDate><description>&lt;body xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;&#xD;
I’m in conversation with a group that’s using &lt;a href="http://extjs.com/"&gt;Ext JS&lt;/a&gt; for&#xD;
their RIA. As I haven’t used it, I thought I’d go ask at the international water fountain&#xD;
that is &lt;a href="http://twitter.com/joshholmes"&gt;twitter&lt;/a&gt; about it. &#xD;
&lt;/p&gt;&lt;p&gt;&lt;a href="http://twitter.com/account/profile_image/joshholmes"&gt;&lt;img style="margin: 0px 5px 0px 0px; display: inline" border="0" alt="" align="left" src="http://s3.amazonaws.com/twitter_production/profile_images/37793692/JoshOnMountCrestedButteS_bigger.jpg" width="73" height="73"&gt;&lt;/img&gt;&lt;/a&gt;Anyone&#xD;
using Ext JS? Thoughts compared to jQuery or Prototype/Scriptaculous?&lt;a href="http://twitter.com/joshholmes/status/1471707440"&gt;about&#xD;
3 hours ago&lt;/a&gt; from &lt;a href="http://www.tweetdeck.com/"&gt;TweetDeck&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&#xD;
 &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
This is what I got back (I love twitter):&#xD;
&lt;/p&gt;&lt;p&gt;&lt;a href="http://twitter.com/parkerkrhoyt"&gt;&lt;img style="margin: 5px; display: inline" alt="Kevin Hoyt" align="left" src="http://s3.amazonaws.com/twitter_production/profile_images/51152312/khoyt-headshot_normal.jpg" width="48" height="48"&gt;&lt;/img&gt;&lt;/a&gt;&lt;strong&gt;&lt;a href="http://twitter.com/parkerkrhoyt"&gt;parkerkrhoyt&lt;/a&gt;&lt;/strong&gt;@&lt;a href="http://twitter.com/joshholmes"&gt;joshholmes&lt;/a&gt; IMHO,&#xD;
Ext is more about traditional applications. jQuery is a Swiss Army knife. Ext can&#xD;
do that, but rarely is used that way.&lt;a href="http://twitter.com/parkerkrhoyt/status/1472263691"&gt;about&#xD;
1 hour ago&lt;/a&gt; from &lt;a href="http://twitterfon.net/"&gt;TwitterFon&lt;/a&gt;&lt;a href="http://twitter.com/joshholmes/status/1471707440"&gt;in&#xD;
reply to joshholmes&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;a href="http://twitter.com/home?status=@parkerkrhoyt%20&amp;amp;in_reply_to_status_id=1472263691&amp;amp;in_reply_to=parkerkrhoyt"&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://twitter.com/ntschutta"&gt;&lt;img style="margin: 5px; display: inline" alt="Nate Schutta" align="left" src="http://s3.amazonaws.com/twitter_production/profile_images/61102156/nts_low_small_normal.png" width="48" height="48"&gt;&lt;/img&gt;&lt;/a&gt;&lt;strong&gt;&lt;a href="http://twitter.com/ntschutta"&gt;ntschutta&lt;/a&gt;&lt;/strong&gt;@&lt;a href="http://twitter.com/joshholmes"&gt;joshholmes&lt;/a&gt; friend&#xD;
of mine loves ext but the learning curve can be steep and leads to lots of js config&#xD;
rather then HTML. I like proto a ton&lt;a href="http://twitter.com/ntschutta/status/1472093998"&gt;about&#xD;
2 hours ago&lt;/a&gt; from &lt;a href="http://iconfactory.com/software/twitterrific"&gt;twitterrific&lt;/a&gt;&lt;a href="http://twitter.com/joshholmes/status/1471707440"&gt;in&#xD;
reply to joshholmes&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;a href="http://twitter.com/home?status=@ntschutta%20&amp;amp;in_reply_to_status_id=1472093998&amp;amp;in_reply_to=ntschutta"&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://twitter.com/objo"&gt;&lt;img style="margin: 5px; display: inline" alt="Joe O'Brien" align="left" src="http://s3.amazonaws.com/twitter_production/profile_images/82028006/Photo_87_revised_normal.jpg" width="48" height="48"&gt;&lt;/img&gt;&lt;/a&gt;&lt;strong&gt;&lt;a href="http://twitter.com/objo"&gt;objo&lt;/a&gt;&lt;/strong&gt;@&lt;a href="http://twitter.com/joshholmes"&gt;joshholmes&lt;/a&gt; we&#xD;
have tried all three and much prefer jquery. but ext is in a very different space&#xD;
with diff objectives&lt;a href="http://twitter.com/objo/status/1471939618"&gt;about 2 hours&#xD;
ago&lt;/a&gt; from &lt;a href="http://www.nambu.com"&gt;Nambu&lt;/a&gt;&lt;a href="http://twitter.com/joshholmes/status/1471707440"&gt;in&#xD;
reply to joshholmes&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;a href="http://twitter.com/home?status=@objo%20&amp;amp;in_reply_to_status_id=1471939618&amp;amp;in_reply_to=objo"&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://twitter.com/ksmarshall"&gt;&lt;img style="margin: 5px; display: inline" alt="Kevin Marshall" align="left" src="http://s3.amazonaws.com/twitter_production/profile_images/33705482/MyPicture_normal.jpg" width="48" height="48"&gt;&lt;/img&gt;&lt;/a&gt;&lt;strong&gt;&lt;a href="http://twitter.com/ksmarshall"&gt;ksmarshall&lt;/a&gt;&lt;/strong&gt;@&lt;a href="http://twitter.com/joshholmes"&gt;joshholmes&lt;/a&gt; I&#xD;
use extjs and jquery together. I just use extjs for some of the nice ui controls it&#xD;
creates and jquery for the rest of the js&lt;a href="http://twitter.com/ksmarshall/status/1471939439"&gt;about&#xD;
2 hours ago&lt;/a&gt; from &lt;a href="http://iconfactory.com/software/twitterrific"&gt;twitterrific&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://twitter.com/dmeeker"&gt;&lt;img style="margin: 5px; display: inline" alt="Dave Meeker" align="left" src="http://s3.amazonaws.com/twitter_production/profile_images/59463338/me_close_normal.jpg" width="48" height="48"&gt;&lt;/img&gt;&lt;/a&gt;&lt;strong&gt;&lt;a href="http://twitter.com/dmeeker"&gt;dmeeker&lt;/a&gt;&lt;/strong&gt;@&lt;a href="http://twitter.com/joshholmes"&gt;joshholmes&lt;/a&gt; We've&#xD;
looked at it extensively. It seems to be a mishmosh of those other libraries, no?&#xD;
I can put you in touch with someone here&lt;a href="http://twitter.com/dmeeker/status/1471737314"&gt;about&#xD;
3 hours ago&lt;/a&gt; from web &lt;a href="http://twitter.com/joshholmes/status/1471707440"&gt;in&#xD;
reply to joshholmes&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;a href="http://twitter.com/home?status=@dmeeker%20&amp;amp;in_reply_to_status_id=1471737314&amp;amp;in_reply_to=dmeeker"&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://twitter.com/jblankenburg"&gt;&lt;img style="margin: 5px; display: inline" alt="Jeff Blankenburg" align="left" src="http://s3.amazonaws.com/twitter_production/profile_images/119021018/jeffatmix_normal.jpg" width="48" height="48"&gt;&lt;/img&gt;&lt;/a&gt;&lt;strong&gt;&lt;a href="http://twitter.com/jblankenburg"&gt;jblankenburg&lt;/a&gt;&lt;/strong&gt;@&lt;a href="http://twitter.com/joshholmes"&gt;joshholmes&lt;/a&gt; My&#xD;
limited experience suggests it's much more a RIA development framework than jquery,&#xD;
etc.&lt;a href="http://twitter.com/jblankenburg/status/1471722235"&gt;about 3 hours ago&lt;/a&gt; from &lt;a href="http://www.tweetdeck.com/"&gt;TweetDeck&lt;/a&gt;&lt;a href="http://twitter.com/joshholmes/status/1471707440"&gt;in&#xD;
reply to joshholmes&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;a href="http://twitter.com/home?status=@jblankenburg%20&amp;amp;in_reply_to_status_id=1471722235&amp;amp;in_reply_to=jblankenburg"&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://twitter.com/nkohari"&gt;&lt;img style="margin: 5px; display: inline" alt="Nate Kohari" align="left" src="http://s3.amazonaws.com/twitter_production/profile_images/84745000/avatar_normal.jpeg" width="48" height="48"&gt;&lt;/img&gt;&lt;/a&gt;&lt;strong&gt;&lt;a href="http://twitter.com/nkohari"&gt;nkohari&lt;/a&gt;&lt;/strong&gt;@&lt;a href="http://twitter.com/joshholmes"&gt;joshholmes&lt;/a&gt; ExtJS&#xD;
is nice if you're looking for a full control toolkit. If you just want a low-level&#xD;
JS library, jQuery is the best imo.&lt;a href="http://twitter.com/nkohari/status/1471715841"&gt;about&#xD;
3 hours ago&lt;/a&gt; from &lt;a href="http://www.tweetdeck.com/"&gt;TweetDeck&lt;/a&gt;&lt;a href="http://twitter.com/joshholmes/status/1471707440"&gt;in&#xD;
reply to joshholmes&lt;/a&gt;&lt;/p&gt;&lt;img width="0" height="0" src="http://www.joshholmes.com/blog/aggbug.ashx?id=77167377-f49f-46c3-a3ab-f0daaca1a5b9"&gt;&lt;/img&gt;&lt;br&gt;&lt;hr&gt;&lt;/hr&gt;&#xD;
This weblog is sponsored by &amp;lt;a href="http://www.joshholmes.com"&amp;gt;Josh Holmes&amp;lt;/a&amp;gt;. &#xD;
&lt;/body&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JoshHolmes?a=QPUhuunIau8:gfKQ3RENB00:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoshHolmes?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoshHolmes?a=QPUhuunIau8:gfKQ3RENB00:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoshHolmes?i=QPUhuunIau8:gfKQ3RENB00:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoshHolmes?a=QPUhuunIau8:gfKQ3RENB00:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoshHolmes?i=QPUhuunIau8:gfKQ3RENB00:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoshHolmes?a=QPUhuunIau8:gfKQ3RENB00:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoshHolmes?i=QPUhuunIau8:gfKQ3RENB00:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JoshHolmes/~4/QPUhuunIau8" height="1" width="1"/&gt;</description><comments>http://www.joshholmes.com/blog/CommentView,guid,77167377-f49f-46c3-a3ab-f0daaca1a5b9.aspx</comments><feedburner:origLink>http://www.joshholmes.com/blog/2009/04/07/AntidotalInfoOnJavaScriptLibraryExtJS.aspx</feedburner:origLink></item></channel></rss>
