Are web developers “stupid and arrogant”?

Michael suggests…

It’s easy to look at the world today and say that web applications have won. This is web developer arrogance. Stupidity is to think that web applications have won because web applications are superior to desktop applications. Smarter, but probably still arrogant developers would point to web applications as disruptive technologies. This involves admitting that web applications are inferior, but good enough, and present enough other "cheaper" advantages to compensate for their inferiority.

To understand why the "web apps have won" claim is dubious. There are definitely a lot of awesome web applications out there. Many of them were created back in the mid/late 90’s, The "features" of these applications were the key to applications, not the user interface. Now these days, most of these web applications offer APIs/web services/RESTful interfaces/whatever you want to call them. In many cases it is possible to build desktop applications that tap into the same features as these web applications. However, this was certainly not the case 10-15 years ago.

If a vendor could make installing and updating applications as seamless as web application models, I believe they’d have a goldmine on their hands.

Ease of deployment is what makes web applications rock. It’s not their functionality, or rounded buttons, or big text boxes, or gradients.

You don’t need to write a web application like the often praised 37 Signals’ applications (such as Basecamp) to have a well received application. It’s not because it’s a web application. It’s because they put in the features and functionality that customers need. If they’d written the same in a desktop application, and it was as simple to deploy and use, I’d argue they’d be just as successful.

Silverlight ClipToBounds

WPF’s ClipToBounds property is not available on Panels in Silverlight, which can lead to some design frustration. Using the new Interactions and Blend Behavior framework, it’s easy to whip up something nearly identical!

using System;
using System.Collections.Generic;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using System.Windows.Interactivity;
//using Microsoft.Expression.Interactivity.Core;

namespace AutoClipperDemo
{
    public class AutoClipBehavior : Behavior<DependencyObject>
    {
        private RectangleGeometry _rectGeo;

        protected override void OnAttached()
        {
            base.OnAttached();

            if (base.AssociatedObject is FrameworkElement)
            {                 
                FrameworkElement fe = AssociatedObject as FrameworkElement;
                fe.SizeChanged += new SizeChangedEventHandler(AttachedObjectSizeChanged);
                
                _rectGeo = new RectangleGeometry();
                fe.Clip = _rectGeo;
                
                OnAdjustClip(fe, new Size(fe.ActualWidth, fe.ActualHeight));
            }            
        }

        protected virtual void OnAdjustClip(FrameworkElement fe, Size sz)
        {
            Rect rect = new Rect(0, 0, sz.Width, sz.Height);

            // it would be interesting to handle the border, but alas
            // we can't as it would clip the border as well. :)
            // best solution is to just put the border on or around
            // the panel being clipped by this
            _rectGeo.Rect = rect;
        }

        private void AttachedObjectSizeChanged(object sender, SizeChangedEventArgs e)
        {            
            OnAdjustClip(AssociatedObject as FrameworkElement, e.NewSize);
        }

        // always clean up after yourself ... remove anything that was attached
        // to prevent incorrect clipping and unnecessary event handlers
        protected override void OnDetaching()
        {
            base.OnDetaching();

            if (base.AssociatedObject is FrameworkElement)
            {
                FrameworkElement fe = AssociatedObject as FrameworkElement;
                fe.SizeChanged -= new SizeChangedEventHandler(AttachedObjectSizeChanged);
                fe.Clip = null;
                _rectGeo = null;
            }
        }
    }
}

image

<Border Grid.Column="4" Grid.Row="2" BorderBrush="White" BorderThickness="4" Background="#FF31C525">
    <i:Interaction.Behaviors>
        <local:AutoClipBehavior/>
    </i:Interaction.Behaviors>
    <Grid>
        <Ellipse Fill="#FF09570A" Stroke="Black" Height="250" Margin="91,138,-61,-46" VerticalAlignment="Bottom" Width="250"/>
    </Grid>
</Border>

Software Developers, your Benefit to Society ranking = C

According to Money Magazine, Software Developers Quality of life ratings suggest that the benefit to society of Software Developers is only a “C” grade.

image

Other jobs of interest:

Technical Writer, Benefit to society: B

Software Development Director, Benefit to society: B

Attorney/Lawyer, Benefit to society: B

Securities Trader, Benefit to society: C

Software Product Manager, Benefit to society: C