The Lost Art of Simplicity

 

I recently did a keynote at the Central Ohio Day of .NET and a session at Kalamazoo X called “The Lost Art of Simplicity. I have to say that I’ve not been as excited about a specific talk in quite a while.

I posted the slides to SlideShare and I’ve signed up for speaker rate for this session. I would love some feedback.

Slides on SlideShare – http://www.slideshare.net/joshholmes/the-lost-art-of-simplicity

Speaker Rate – http://www.speakerrate.com/talks/773-the-lost-art-of-simplicity 

The Lost Art of Simplicity – Presentation Transcript

  1. The Lost Art of Simplicity Josh Holmes joshholmes.com josh.holmes@microsoft.com
    image
  2. sim·plic·i·ty (sm-pls-t) n.
    1. The property, condition, or quality of being simple or uncombined.
    2. Absence of luxury or showiness; plainness.
    3. Absence of affectation or pretense.
    4. a. Lack of sophistication or subtlety; naiveté.
        b. Lack of good sense or intelligence; foolishness.
    5. a. Clarity of expression.
        b. Austerity in embellishment.
    image

    Let’s start off by talking about what simplicity is. The official dictionary definition has 5 parts. We are going to focus in on the first definition. Simplicity is the property, condition or quality of being simple or uncombined. This is a beautiful statement that is unfortunately missing in much of our current application development.

    When we talk about something being simple, often people just right to the fourth definition assuming that it’s lacking sophistication or good sense and intelligence. That it’s foolish. As technologists, our tendency when we see something that’s simple is to say “Oh, I could write it in a weekend”. There’s a fair amount of NIH (Not Invented Here) tendencies that are just part of our culture. This is a dangerous concept.

    The last definition is the one that I really like. To have a something that has “Clarity of Expression” is awesome. Put that with the first definition and we really have something. I’m striving to solve problems in ways that are “Simple and uncombined” with “Clarity of Expression”.

    http://hikingartist.com/art/Peopletypes_g54-King_type_p124.html

    http://www.thefreedictionary.com/simplicity

  3. Simplicity is an acquired taste. Mankind, left free, instinctively complicates life – Katherine F. Gerould
    image

    One of the great things about the human race is that we are a race of problem solvers. And we take great pride in our solutions. The issue is that the solutions that we are most proud of are the ones that only we can understand.

    The best ideas, however, are the ideas that are immediately obvious once someone shows it to you. It’s that head smack “Duh” moment that accompanies those great ideas that I really like.

    http://hikingartist.com/art/animals_g58-evolution_p60.html

  4. I adore simple pleasures. They are the last refuge of the complex. – Oscar Wilde
    image

    Let’s use the example of this guy dreaming about having that apple for lunch… It’s a fairly simple problem on it’s face. We, as IT folks, get the IT equivalent of this issue day in a day out.

    http://www.flickr.com/photos/hikingartist/3010374978/

  5. Our life is frittered away by detail. Simplicity, simplicity, simplicity! – Henry David Thoreau
    image

    Can I get report of sales by geography? How about splitting that by demographics such as age or gender? What’s the effect of our current marketing efforts on sales of our latest line and how does that differ by geography or demographic? Could I enter a contact I met at the picnic into our CRM? Could that be blue?

    http://hikingartist.com/art/Cartoon_illustration_g29-Still_want_that_apple__p262.html

  6. Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius — and
    a lot of courage — to move in the opposite direction. – Albert Einstein
    image

    Our biggest fear is that the user is going to go get a copy of Access or something equally destructive and try to solve the problem themselves. Often they can effectively solve the short term problem and in the process bring down the enterprise…

    And this is a dangerous thing because as they open up the simple tools such as access and solve just their problem, they are potentially causing other issues like data redundancy throughout the company or duplicating efforts with another group. Often these solutions are even done with ignorance to larger concerns such as privacy laws.

    Even so, they are solving their problem in the short term and that was their goal.

    http://www.flickr.com/photos/hikingartist/3010374978/

  7. Most of the fundamental ideas of science are essentially simple, and may, as a rule, be expressed in a language comprehensible to everyone. – Albert Einstein
    image

    To head that off, we just, we start throwing our favorite technologies and designs at the problem to solve it in the most “elegant” way. This quickly results in over engineering the task at hand.

    One immediate and obvious danger is that we take that simple request and roll it into the next version of the application that’s going to be 18-36 months down the road ignoring the fact that it’s a pain that the user is feeling today. What happens when, 18 months down the road, the user that has requested that feature has solved the problem some other way? Or if that user is not even employed by the company anymore?

    http://www.flickr.com/photos/hikingartist/3010375012/sizes/o/

  8. It takes a long time to make something complicated simple, but if you do, it will work w/o problems for a long time. – F. Andy Seidle, http://faseidl.com/ 
    image

    And the solution that results is not only over engineered but it’s reminiscent of a certain coyote with all of the possible ways that it can fail. The reality is that the more complex a problem is, the more ways that it can fail.

    As a solution ramps up in complexity and “cleverness” it quickly becomes more fragile because there are more moving parts and more possible points of failure. Just because something is using the latest or coolest technology, doesn’t mean that it’s the best idea. If that latest or cool technology reduce complexity in some way, such as reducing the number of tools, streamlining process or raising the bar on the usability then there is a good argument to leverage it.

    http://www.flickr.com/photos/hikingartist/3009540065/

  9. The Innovator’s Dilemma that disruptive innovations are almost never the result of technological breakthroughs but are instead recombination’s of existing and often inexpensive technology in forms the former market leaders don’t pursue. – Clayton Christensen
    image

    In all of this, we are missing the obvious. There are known simple solutions to a lot of the requests that we get on a day to day basis.

    The first thing that we have to get over is the NIH complex that we all have. When you get a new request is your first thought, I can build that… Or is your first thought, I bet that’s been built…

    The second thing that we have to recognize is that the simple solution is probably the right one. If the solution that we have come up with is a so complicated that we are amazed with ourselves and proud of it, it’s probably the wrong direction.

    http://hikingartist.com/art/Cartoon_illustration_g29-Want_an_apple_p261.html

  10. Dealing with complexity is an inefficient and unnecessary waste of time, attention and mental energy. There is never any justification for things being complex when they could be simple. – Edward de Bono
    image

    We can’t keep down this destructive path of building more and more complex solutions that take eons to develop when the users have needs that we are not addressing in the short term.

    http://hikingartist.com/art/Cartoon_illustration_g29-Want_an_apple_p258.html  

     

  11. I’m Fine
    image

    We are living in denial that we are the problem. It’s our insistence that we are the technical gods and know everything that is driving this as a problem in the industry in the first place.

    http://hikingartist.com/art/Cartoon_illustration_g29-Not_to_be_disturbed_p398.html  

  12. We need to be very careful about the lure of complexity. We should not fall into the trap of thinking that if it’s hard to design, it must be good; that if it’s using the latest technology, it must be good; that if all our friends think it’s really cool, it must be good. – Gerry McGovern
    image

    We, as the IT world, tend to go rampant with technology with little to no thought to the consequences. Even though we are trying to make people’s lives easier, at best we do no harm. At worst, we cause a lot of pain and anguish for our users.

    The answer that a lot of us, and I’m guilty of this too, turn to is to vet our ideas and our UI designs with our peers. The issue is that our peers are also technologists who are just as geeked as we are about X new technology. This just perpetuates the problem.

    http://hikingartist.com/art/Peopletypes_g54-The_akward_type_p86.html

    http://www.gerrymcgovern.com/nt/2004/nt_2004_11_22_complexity.htm

  13. Things should be made as simple as possible, but not any simpler. – Albert Einstein
    image

    Let’s take a short step back and examine how complexity comes to our applications in the first place.

    Often complexity sneaks in under different names. One of my favorite is “Enterprise” which almost automatically means a complexity multiplier of 10. The idea here is that we have to be “Enterprise Quality”. This implies a certain engineering rigor, stability and scalability. One huge issue that I have with this term is that if you look at a mid to large sized enterprise with 10k, 20k or even 50K users you are still looking at a user base that would be considered a rounding error on some of the larger consumer facing applications such as Facebook, Twitter, Wikipedia and the like.

    http://hikingartist.com/art/animals_g58-Trojan_trap_p106.html

  14. The whole point of human-centered design is to tame complexity – Don Norman
    image

    Often the complexity is as simple as not understanding our users.

    I was recently in a long envisioning session with a customer about the next version of their client facing applications. We spent a lot of time hashing through their current application and came up with a number of ways that we might be able to save time or give a better experience. But at some point I backed up and asked the question, what are the top three things that your customers do with the application? If we knew that, we could focus on surfacing those to three tasks in the UI to help cut complexity and time out of the user’s day. The reality is that they couldn’t answer that question. There were some guesses and opinions thrown out but nothing definitive that they could throw out. Their homework assignment was to go back and find that out.

    I find this as an issue in a lot of customer engagements. Very few companies actually know how many of their users are using Windows 98 or IE5 but there is an assumption that it’s an issue so a lot of complexity is built into the system in order to accommodate what might very well be a small portion of their audience.

    The other side of this issue is that there’s what the users say that they want and what they actually need. There are some simple examples. “Could you Web 2.0ify my site?” “I need a X (where X is some buzzword that they just read in some article) technology application” Or any other place where technology enters requirements. This is where we need to redirect the user’s requirements by asking them about their goals and aspirations and then start figuring out what they need from that. “Oh, you want to cut down on the amount of text that your users have to type while increasing the accuracy of their reporting? How about we replace that block of text by allowing them to select a picture of what they are looking for? Yeah, we can do that without requiring them to wait on the page to reload.”

    http://www.flickr.com/photos/hikingartist/3208741909/sizes/o/

  15. I apologize for the length of this letter, but I didn’t have time to make it shorter. – Mark Twain
    image

    An unfortunately common problem that I see in the industry is that given group of developers knows one or two technologies and approach every problem with that technology as the solution. The reality is that that there are tremendous number of technologies at their disposal from web applications to desktop applications to mobile applications to hybrid solutions of all of those. You need to approach each problem with an open mind as to what is the best solution for that problem. Sometimes you’ll find that the solution is not actually a technical solution at all.

    The real solution here is to take the time to explore all of the possible solutions, technology based or not.

    http://hikingartist.com/art/meetings_g55-hammer_management_p129.html

  16. Ok. now what?
    image

    Where are we now and what can we, as mere cogs in the wheels, do to tackle this problem?

    http://hikingartist.com/art/Cartoon_illustration_g29-Short_term_solution_p408.html  

  17. \”Think simple\” as my old master used to say – meaning reduce the whole of its parts into the simplest terms, getting back to first principles. – Frank Lloyd Wright
    image

    There’s, unfortunately, not a magic solution to the issue of complexity. Simple is hard.

    Often you have to come up with several complex solutions that you can boil down to the simple solution. Often, in an effort to find the right solution, I will solve or at least map out solutions to a given problem in several different ways with a number of technologies ranging from desktop to web to mobile to non-technology solutions. Kind of like going to a shoe store and trying on a ton of different styles and sizes of shoes, you can get a lot of interesting ideas from checking out al
    l of the different solutions. You might be surprised by the solutions that make the most sense at the end of the day.

    http://hikingartist.com/art/Cartoon_illustration_g29-Wizard_type_3_p111.html  

  18. Simplicity is not the goal. It is the by-product of a good idea and modest expectations. – Paul Rand
    image

    All of that said though and as much as I’m talking about Simplicity in this talk, the reality is that Paul Rand has it right. “Simplicity is not the goal. It is the by-product of a good idea and modest expectations”.

    http://hikingartist.com/art/Motivation_g56-The_just_enough_Type_p116.html

  19. Never again will I make the simple into the complex. Something of true value does not become more valuable because it becomes complicated. – Donald Curtis
    image

    One of the biggest problems is that we try to, for a large number of reasons, try to boil the ocean with our applications. When we build out our project plan and it’s going to be an 18 month cycle before the users get a new version, they are going to go to battle tooth and nail to get their feature request on the docket because they know that if they are not able to get it in this release, it’s going to be at least 36 months out. All of these features crammed into a release adds not only a lot of complexity but a lot of risk to the endeavor.

    We have to get past the misperception that features equal value. Features do not equal value. Solving people’s problems equals value. The amount of complexity and risk that we add with these massive project plans hurt out ability to solve someone’s problem in a reasonable time frame.

    http://hikingartist.com/art/animals_g58-Fishing_type_p112.html

    http://en.wikipedia.org/wiki/Willard_Gibbs

  20. The ability to simplify means to eliminate the unnecessary so that the necessary may speak. – Hans Hofmann
    image

    You need to start small. Even if you know that the end game is far bigger, what’s that first step? What’s the minimal set of features that you need to get started? This is a struggle for a lot of people as we all want to go for the big vision. The natural tendency is to think that more is better but in a lot of cases, more just gets in the way of success.

    This is a core concepts that groups like 37 Signals have held. Their motto is that the first order of business is to get running and start building a customer base. You can worry about scaling later. But if you spend too much time worrying about scaling up front, you’ll never get out there to build the customer base in the first place.

    http://hikingartist.com/art/meetings_g55-Fools_can_t_you_see_the_bird…_p12.html

  21. Making the simple complicated is commonplace; making the complicated simple, awesomely simple, that’s creativity – Charles Mingus
    image

    On the other side of the coin, you need to have a clear concept of the future as you are getting started. I often see applications that are built with no concept future requirements and accidentally build in roadblocks to success. There are a lot of simple things that you can do that will future proof your application to some degree. It’s not hard to build in, if you start from the beginning with a tiered and separated architecture so that you can replace bottle necks if they start to pose a problem.

    This is sometimes a hard balance to hit but it’s an important one to tackle.

    There are a lot of straight forward things you can do such as adopting some of the great architectural patterns such as MVC (Model View Controller) or MVP (Model View Presenter) combined with great practices such as Test Driven Development (TDD). TDD is more than just building regression tests. It forces you to design and build your application in a modular fashion that allow you to make changes and modifications to your application quickly and with confidence. MVC and MVP are architectural patterns that work well with TDD and provide for great separation of concerns to further provide the agility that you need to grow and scale your application over time.

    http://hikingartist.com/art/meetings_g55-Not_quite_ready_p7.html

    http://en.wikipedia.org/wiki/Hans_Hofmann

  22. When thought is too weak to be simply expressed, it’s clear proof that it should be rejected – Luc De Clapiers
    image

    http://hikingartist.com/art/Peopletypes_g54-The_engineer_p121.html

    http://en.wikipedia.org/wiki/Luc_de_Clapiers,_marquis_de_Vauvenargues

  23. The whole is simpler than the sum of its parts. – Willard Gibbs
    image

    None of this means that I’m not solving complex problems. It just means that I’m layering simple solution on top of simple solution to solve those complex problems.

    http://hikingartist.com/art/Free_print_versions_g79-Building_bridges_p747.html

  24. The first requirement for an exemplary user experience is to meet the exact needs of the customer, without fuss or bother. Next comes simplicity and elegance that produce products that are a joy to own, a joy to use. True user experience goes far beyond giving customers what they say they want, or providing checklist features. – Nielsen Norman Group
    image

    So where to from here?

    As I look into the future, I see a world where we are working hand in hand with our users to solve their real needs rather than reacting to what they say that they want and confusing checklists of features with value. I dream of the day when we are able to respond to the users needs as quickly as we can get them to express those needs to us to the point of being able to forecast and proactively provide exactly the functionality that the user needs, nothing more, when they need and not a moment before they do.

    To do that, we need to forgo our egos, our love of complexity and our die hard grip on our favorite technologies and focus on the user.

    http://hikingartist.com/art/meetings_g55-The_observer_type_p135.html

  25. Go confidently in the direction of your dreams! Live the life you’ve imagined. As you simplify your life, the laws of the universe will be simpler. – Henry David Thoreau
    image

    You call to action is to go to war against complexity. Stand up for simplicity.

    Take the extra time that it is going to take to build the uncombined solution that has clarity of expression. Don’t confuse simple with lack of sophistication.

    Focus on your user and their needs.

     

    As you do this. As you take on this challenge and “as you simplify your life, the laws of the universe will be simpler”.

    http://hikingartist.com/art/Motivation_g56-The_gatekeeper_type_p48.html

  26. All artwork used in this presentation is licensed under Creative Commons by Frits Ahlefeldt, aka hikingartist Support his amazing craft at http://hikingartist.com
    image

    Before I finish, I need to say a quick thank you to Fritz Ahlefeldt. He’s a Danish artist with obvious talent. He publishes a large amount of his work under creative commons. If you like this art, you can see much more at http://www.hikingartist.com and support him and his amazing craft.

  27. The Lost Art of Simplicity Josh Holmes joshholmes.com josh.holmes@microsoft.com
    image

I’m looking forward to evolving this talk as I move towards CodeStock and DevLink. I know that there was a really nice progression in just a week between Central Ohio Day of .NET and Kalamazoo X as my message got a lot crisper and more direct based on a lot of great constructive advice I got from Michael Eaton, Michael Wood, Jim Homes and more.

Glimmer – A jQuery Designer

I had heard about this effort a few weeks back but I’m thrilled that it’s public and I can talk about it now. Karsten Januszewski and some of the other whiz kids on the MIX team have put together a visual designer for jQuery called Glimmer.

Right now, they’ve got a number of design wizards that you can leverage but they’ve built a great plug-in model so that you can write your own for your favorite jQuery UI plug-in.

Check out their video on how to leverage Glimmer and how it all came to be.

Get Microsoft Silverlight

I’m really geeked and am looking forward to using this in my next web dev projects…

Creating a Simple Silverlight Countdown Blog badge

image I’m going to be speaking at RIAPalooza in about two weeks, well more specifically at the time of this writing it’s 10 days, 12 hours, 48 minutes and 45 seconds. 🙂

I’m going to be tag teaming with Mike Labriola again talking about “10 questions about RIA you haven’t had the courage to ask”. We’ve got a short list of questions but are hoping to get some questions from the crowd as well. If you happen to have any questions, feel free to shoot them to me in the comments section on this post.

Anyways, we were discussing different ways to get the word out about RIAPalooza and someone mentioned that we didn’t have have a blog badge so I decided to create one.

I started by grabbing some art from the RIAPalooza web site. I started out in Expression Blend with a simple Silverlight project. Here are the steps that I took.

  1. Resize the Page.xaml user control to 100×200 to fit the blog badge size.
  2. Add the wood background that I grabbed from the RIAPalooza web site trimmed down to the blog badge size.
  3. Paste in the two other images, one for the logo (referred to as i and one for a a free t-shirt offer.
  4. Animate the two images to wiggle, spin, wiggle, wait, wiggle, spin, wiggle, wait, reverse.
    •  image
      To do this, I opened a timeline and started by rotating the first image -6 degrees and then a frame later rotating it to 6 degrees and then a frame later back to 0. This gives the images a nice little wiggle and catches the viewer’s eye without being too annoying. Well, I don’t think it’s too annoying but you can tell me…
    • image
      Then I kicked forward 2 seconds and did the wiggle again in preparation of swapping to two images. The wiggle makes a nice little transition before the action starts.
    • image
      At the end of the wiggle, I spun the image on it’s X axis over the span of half a second. That’s accomplished by setting the X Skew to zero.
    • On the same frame that the first logo hits an X Skew of zero, I make the other image visible with it’s X Skew to zero an proceed to transform it’s skew to 1 (normal) over the course of a half second.
    • Then I wiggled the t-shirt offer image in the same manner that I did the first logo.
    • Now, back in the code, I set a few properties and started the animation.
      AnimateLogos.AutoReverse = true;
      AnimateLogos.RepeatBehavior = new RepeatBehavior(1000);
      AnimateLogos.Begin();
  5. Now that the logos are moving, I needed a link to the site. Simple enough using a HyperLinkButton.
  6. Last thing I needed was to provide some type of count down. At first I just used a couple of labels and set the text.
    • First, I used a timer set to go every second and set the time
      _timer = newTimer(newTimerCallback(Timer_Tick), null, 0, 1000);
    • Next I used the dispatch object to work on the UI thread as follows:
      public void Timer_Tick(object state)
      {
          Dispatcher.BeginInvoke(() =>
            {
                try
                {
                    DateTime launchDate = new DateTime(2009, 5, 8, 8, 0, 0).ToUniversalTime();
                    TimeSpan span = launchDate.Subtract(DateTime.Now.ToUniversalTime());
      
                    txtDays.Text = string.Format("{0} Days", span.Days);
                    ...
                }
                catch
                {
                    //Eat all errors. We'll get another chance in a second...
                }
            }
          );
      }

There are a couple of things to notice about the code above. First, I just used everything as UniversalTime. I thought about trying to do the whole timezone thing but realized that it didn’t matter for a countdown because as long as everything was in the same timezone the math would be right.

Second, notice that I’m eating all of the errors in the timer. The basic error that I can get from this code is a threading issue and since this is low priority code, I didn’t care about the threading issue. It’s not like there’s a real recovery path other than trying again in a second.

Now that I had the simple countdown and badge done, I decided that I didn’t like the flat labels and wanted a real clock style count down. To accomplish this I started a Silverlight FlipClock project to build a reusable clock face.

Since I was creating a flipping clock with a separate top and bottom, it made sense to create a control to encapsulate those bits in user controls that I could reuse. There were two interesting parts here. First, how to get the text to cut off at the top and second, how to get the text to scale correctly with the number if we resized it.

image The first issue was solved by using a brush that cut off to an opacity of zero just under halfway. I did that on both the background and the textbox. The whole gradient is actually made up of three stop points. Two set to be the same color and opacity of 100% and a third that is set to the same color but opacity of zero. This third stop is just a hair further down than the second. The purpose of the second stop is to keep it from fading from top to bottom rather than having the hard like that I desired.

<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
    <GradientStop Color="#FFFFFFFF" Offset="0"/>
    <GradientStop Color="#FFFFFFFF" Offset="0.48"/>
    <GradientStop Color="#00FFFFFF" Offset="0.49"/>
</LinearGradientBrush>

The second issue was solved thanks to Laurent Bugnion. He pointed out that although Silverlight doesn’t have a scalable font, there is a VIewbox in the Silverlight Control Toolkit on Codeplex that will scale anything inside itself correctly.

<controls:Viewbox Height="Auto" HorizontalAlignment="Stretch" Margin="0,0,0,0"
VerticalAlignment="Stretch" Width="Auto" Content="Viewbox" Stretch="Fill">
<Grid x:Name="LayoutRoot" Background="{x:Null}">
. . .
</Grid>
</controls:Viewbox>

I added a simple property to set the value in the textbox.

public int Value
{
    get
    {
        return int.Parse(txtNumber.Text);
    }
    set
    {
        txtNumber.Text = value.ToString();
    }
}

Then I just played with the styling a little with a slight highlight on the top and the like.

Next, I created a FlippingNumber control that would be the base for the various numbers on the clock. To make it look right,  I actually needed 4 sections to the control. Two to show the current number and two to show the next number and we flip between them. I simply put two of the top and two of the bottom number controls one the page. The flip was just an animation similar to the flipping of the two images in the top of the badge. The only difference is that I skewed the controls a little to give it a slight 3d effect.

Once that was done, the rest of the number was built in code.

public FlippingNumber()
{
    InitializeComponent();

    FlipDown.Completed += new EventHandler(FlipDown_Completed);
}

void FlipDown_Completed(object sender, EventArgs e)
{
    numBottomBack.Value = _val;
    numTopFlip.Value = _val;
}

int _val = -9999;
public int Value
{
    get
    {
        return _val;
    }
    set
    {
        if (value != _val)
        {
            _val = value;
            numBottomFlip.Value = _val;
            numTopBack.Value = _val;

            FlipDown.Begin();
        }
    }
}

The other property that I added was so that the clock could adjust the speed at which the number flipped.

public double SpeedRatio
{
    get
    {
        return FlipDown.SpeedRatio;
    }
    set
    {
        FlipDown.SpeedRatio = value;
    }
}

Finally, I was ready to piece together the clock. That was a simple matter of placing 6 of the flipping number controls on the clock face. All that was left was set the time on the clock based on a value in the passed in TimeSpan.

TimeSpan _timeSpan;
public TimeSpan TimeSpan
{
    get
    {
        return _timeSpan;
    }
    set
    {
        _timeSpan = value;

        numSecondOne.Value = FirstCharacter(_timeSpan.Seconds);
        numSecondTwo.Value = SecondCharacter(_timeSpan.Seconds);

        numMinuteOne.Value = FirstCharacter(_timeSpan.Minutes);
        numMinuteTwo.Value = SecondCharacter(_timeSpan.Minutes);

        numHourOne.Value = FirstCharacter(_timeSpan.Hours);
        numHourTwo.Value = SecondCharacter(_timeSpan.Hours);
    }
}

private int FirstCharacter(int num)
{
    string s = string.Format("{0:00}", num);
    return int.Parse(s.Substring(1, 1));
}

private int SecondCharacter(int num)
{
    string s = string.Format("{0:00}", num);
    return int.Parse(s.Substring(0, 1));
}

The last thing on the badge that I did was change the timer control code on the overall blog badge to pass the time span into the clock face rather than parsing it into textboxes.

Now I wanted people to be able to use it from their own blog. To allow that to happen, I needed a put together a cross domain policy via the clientaccesspolicy.xml file.

<?xml version="1.0" encoding="utf-8"?>
<access-policy>
    <cross-domain-access>
        <policy>
            <allow-from http-request-headers="*">
                <domain uri="*"/>
            </allow-from>
            <grant-to>
                <resource path="/resources/SilverCountDown.xap" include-subpaths="true"/>
            </grant-to>
        </policy>
    </cross-domain-access>
</access-policy>

Notice that I’m allowing access from any domain but restricting access to only load the specific xap file.

Anyone who wants to put it on their blog can do so simply by leveraging the following object tag.

<div id="silverlightControlHost">
    <object data="data:application/x-silverlight," 
type="application/x-silverlight-2" width="100px" height="200px"> <param name="source" value="http://www.joshholmes.com/resources/SilverCountDown.xap"/> <param name="background" value="white" /> <param name="minRuntimeVersion" value="2.0.31005.0" /> <param name="autoUpgrade" value="true" /> <a href="http://go.microsoft.com/fwlink/?LinkID=124807" style="text-decoration: none;"> <img src=http://go.microsoft.com/fwlink/?LinkId=108181
alt="Get Microsoft Silverlight" style="border-style: none"/> </a> </object> <iframe style='visibility:hidden;height:0;width:0;border:0px'></iframe> </div>

Feel free to place the badge on your own blog to help promote RIAPalooza – When this year finishes, I’ll update the counter with next years dates as soon as we know it… 🙂

Also – I put the code up at http://www.joshholmes.com/resources/silvercountdown.zip. Feel free to take it and play with it.

Antidotal info on JavaScript Library Ext JS

I’m in conversation with a group that’s using Ext JS for their RIA. As I haven’t used it, I thought I’d go ask at the international water fountain that is twitter about it.

Anyone using Ext JS? Thoughts compared to jQuery or Prototype/Scriptaculous?about 3 hours ago from TweetDeck

 

This is what I got back (I love twitter):

Kevin Hoytparkerkrhoyt@joshholmes IMHO, Ext is more about traditional applications. jQuery is a Swiss Army knife. Ext can do that, but rarely is used that way.about 1 hour ago from TwitterFon in reply to joshholmes

Nate Schuttantschutta@joshholmes friend of mine loves ext but the learning curve can be steep and leads to lots of js config rather then HTML. I like proto a tonabout 2 hours ago from twitterrific in reply to joshholmes

Joe O'Brienobjo@joshholmes we have tried all three and much prefer jquery. but ext is in a very different space with diff objectivesabout 2 hours ago from Nambu in reply to joshholmes

Kevin Marshallksmarshall@joshholmes I use extjs and jquery together. I just use extjs for some of the nice ui controls it creates and jquery for the rest of the jsabout 2 hours ago from twitterrific

Dave Meekerdmeeker@joshholmes We’ve looked at it extensively. It seems to be a mishmosh of those other libraries, no? I can put you in touch with someone hereabout 3 hours ago from web in reply to joshholmes

Jeff Blankenburgjblankenburg@joshholmes My limited experience suggests it’s much more a RIA development framework than jquery, etc.about 3 hours ago from TweetDeck in reply to joshholmes

Nate Koharinkohari@joshholmes ExtJS is nice if you’re looking for a full control toolkit. If you just want a low-level JS library, jQuery is the best imo.about 3 hours ago from TweetDeck in reply to joshholmes

Kalamazoo X conference

On the heels of the announcement by Michael Eaton, I thought I should post about how excited I am about the upcoming Kalamazoo X Conference

The Kalamazoo X conference, while being put on by the technical community, is a very different sort of conference. You’re not going to hear “technical” talks. All of talks pertain to technical folk but it’s a step back from the nuts and bolts that we usually deal with day in and day out and focusing on the topics that are really important.

Jeffatmix

Jeff Blankenburg will be giving Six Tips for Improving User Experience. Jeff is one of those amazing people that cross easily between the designer and developer world and can talk to either group with complete credibility. Again, he’s bringing great experience to the table as his roots in development are in the digital marketing arena.

Photo_11

Leon Gersing will lead a discussion about Change. Leon is a great software craftsman who has worked in all types of development shops from large consulting shops and independent software vendors to the small and nimble consulting shops working in technology ranging from his much loved Sharepoint to Ruby on Rails. His deep passion and experience combine to make him a dynamic and engaging speaker.

We have the great fortune to hear from Jim Holmes twice speaking on 3 Tips to Improve Your Development Process and Leadership 101. The first talk is a great talk that is important to anyone doing development regardless of their current process, tooling or any other variables.

Jim’s second talk on Leadership 101 couldn’t be given by a more perfect guy. Jim is a born leader in the truest sense of the word. Management, as a role on a team, can be given to someone regardless of their qualifications. Leadership is proven and earned over time. Jim’s led the CodeMash conference, which he downplays but he is the head cat herder. He doesn’t play a “management” role but rather leads through great thought leadership, influence and enablement of the people around him. But he knows when the buck has come to his desk and he has the ability to make those hard decisions that are required of a true leader.
I’ve heard Jim speak on similar topics in the past and I can attest that he’s bringing real world hard fought battle proven experience to the table. You can get some of his thoughts on the topic reading his blog post about Leadership 101.

Head_shot_v2

Brian Prince will be reprising his Soft Skills talk. This is a great talk that speaks to the non-technical side of our jobs that we all need to work on. I’ve seen, and actually delivered once when Brian came down with the plague the night before the Grand Rapids Day of .NET, this talk before. It strikes to the heart of how you, as a technical person, need to work on and grow your soft skills. It’s not fuzzy feel good bits, it’s things that will actually help you in your career.

Josh Holmes on Mount Crested Butte - photo by James WardAnd I’ll be speaking on the Lost Art of Simplicity. I’ve decided to go to war with complexity. Simplicity is a lost art in the application development space.

The Wikipedia definition of Simplicity is “Simplicity is the property, condition, or quality of being simple or un-combined. It often denotes beauty, purity or clarity. Simple things are usually easier to explain and understand than complicated ones. Simplicity can mean freedom from hardship, effort or confusion.”

This is a beautiful statement that we often lose sight of when we are building our applications. Instead we are on a never ending quest to fill out a checklist of features or to build something clever forgetting about the actual needs of our users to get a specific task done. This session takes complexity to task and challenges you to bring simplicity to the center of your development with some straightforward ideas and guidance.

I’ve not even touched on the sessions by Tim Wingfield, Chris Woodruff, Michael Wood, Phil Japikse, Sarah Dutkiewicz, James Bender, Dave Giard, Andy van Solkema or Clovis Bordeaux! I know most of these speakers and have seen them speak on a variety of topics. I guarantee that they are great speakers and that you’ll learn something from each and every one of them…

Best of all, you don’t have to choose between the all of these great sessions. I was terrified that I’d be in a time slot opposite of Jim Holmes and A: miss his talk and B: have to compete with him for audience.

As per the announcement by Michael Eaton, the conference format has been radically altered to be a single track conference with 20-30 minute sessions rather than the typical 4 track conference with 70 minute sessions. This will let me catch all of the sessions and it gives a new energy to all of the sessions as the speakers have to stay very tight to their topic and come with high energy to hit the time limit. I’ll be working with Mike to make sure that we have the hook ready  to go for people that go over. That might include me…

As you can tell, the Kalamazoo X Conference will be a very different conference than you’re used to. Now, it does cost $20.00 for professionals and $10.00 for students. That’s a VERY reasonable price for the quality of the speakers, topics and format that the organizing committee has been able to assemble.

Hopefully I’ll see you in Kalamazoo on Sat. April 25th.