Really ?

Really Microsoft… Really… (HTC HD7 Bugbears)

Really ?
Really ?

I don’t really consider myself a fan-boy for any single platform, OS or Manufacturer. I have an IPhone which I think is a great day-to-day tool and I have been toying with the idea of an IPad for a while now. On the other hand I’ve been a Microsoft .NET Developer for >8 years now, (saying that made me feel just a bit old…), I use a PC, know v. little about Mac’s and like most things MS. (.NET Dev, Xbox, Win7, etc…).

</Impartial-Fence-Sitting-Disclaimer>

Read More “Really Microsoft… Really… (HTC HD7 Bugbears)”

Minority Report

The future of UX & UI Innovations

There was fantastic stream of thought on Twitter last week about UX & UI Design; all started thanks to this tweet by @kellabyte, a Canadian developer with an uncanny knack for stirring up the masses and making them think.

[tweeted]http://twitter.com/kellabyte/status/27254194610[/tweeted]

What followed was a torrent of ideas on how to improve user experience, user interfaces & user interaction in terms of both the software & the hardware we use on a daily basis. Apparently Crowdsourcing + Brainstorming = Crowdstorming and a lot of credit for this post goes to following twitter folk: @robertmclaws, @cromwellryan, @uliwitness, @Montagist, @DavidQMora, @BenPittoors, @kellabyte and Others. There was a lot covered over the course of the chat, (here as a CSV file for posterity) but a few key things rang true with me so… stream of consciousness follows.

Read More “The future of UX & UI Innovations”

Silverlight

Silverlight 4 Clock

Silverlight
Silverlight
I was trying to get my Development Environment up & running the other day with Silverlight 4. It turns out that the Silverlight debug runtime isn’t actually part of the standard client, or the Silverlight 4 Tools for Visual Studio.

Thanks to this thread I discovered

The “Silverlight managed debugging package” is part of the developer runtime, not the SDK or Tools. Make sure you have the latest version of the developer runtime installed (available at http://go.microsoft.com/fwlink/?LinkID=188039

On the plus side I did throw together this nice pretty clock just to test everything out.
There’s probably a dozen ways to break this, but it covers the basic for autosizing the grid, limiting the dimensiosn with min height & max height sections, drawing lines & drawing ellipses & a small bit of math.



XAML

<UserControl x:Class="SlvrClock.Lib.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="400" MinHeight="100" MinWidth="100">
    <Grid x:Name="LayoutRoot" Background="Black">
        <Line x:Name="lh" Stroke="Green" StrokeThickness="15" StrokeStartLineCap="Round" StrokeEndLineCap="Triangle" />
        <Line x:Name="lm" Stroke="Blue" StrokeThickness="10" StrokeStartLineCap="Round" StrokeEndLineCap="Triangle" />
        <Line x:Name="ls" Stroke="Red" StrokeThickness="5" StrokeStartLineCap="Round" StrokeEndLineCap="Triangle" />
        <Ellipse x:Name="el" Stroke="Yellow" StrokeThickness="5" />
    </Grid>
</UserControl>

C#

public partial class MainPage : UserControl
{
    private Storyboard timer = new Storyboard(); //timer
    private const double radian = Math.PI / 180; //radian
    private bool started = false;
    private double MaxHandLength { get; set; } //shorter length of width:height
    private Point CenterPoint { get; set; }
        
    public MainPage()
    {
        InitializeComponent();
        timer.Duration = TimeSpan.FromMilliseconds(50);
        timer.Completed += new EventHandler(Timer_Completed);
        timer.Begin();
    }

    protected void Timer_Completed(object sender, EventArgs e)
    {
        double aw2 = LayoutRoot.ActualWidth / 2, ah2 = LayoutRoot.ActualHeight / 2;
        if (!started || CenterPoint.X != aw2 || CenterPoint.Y != ah2)
        {
            //Reset the centerpoint & ratios on startup or if the window resizes.
            CenterPoint = new Point(aw2, ah2);
            MaxHandLength = Math.Min(CenterPoint.X, CenterPoint.Y);
            el.Height = el.Width = ((MaxHandLength - 10) * 2);
            lh.X1 = lm.X1 = ls.X1 = CenterPoint.X;
            lh.Y1 = lm.Y1 = ls.Y1 = CenterPoint.Y;
            started = true;
        }
        var now = System.DateTime.Now;
        //line hour - apply partial split for smoother transition and update more than onces per second.
        ChangeHand(lh, MaxHandLength - 80, 30 * (now.Hour + ((double)now.Minute) / 60));
        //line minute
        ChangeHand(lm, MaxHandLength - 60, 6 * (now.Minute + ((double)now.Second) / 60));
        //line second
        ChangeHand(ls, MaxHandLength - 40, 6 * (now.Second + ((double)now.Millisecond) / 1000));
        timer.Begin();
    }

    protected void ChangeHand(Line l, double r, double a) {
        //Calculate the point on the circumference based on Center, Radius & Angle.
        var i = a * radian;
        l.X2 = CenterPoint.X + r * Math.Sin(i);
        l.Y2 = CenterPoint.Y + r * -Math.Cos(i);
    }
}
Config Fun

InstallUtil, Windows Services & ProjectInstallers with App.Config Settings

Config Fun
Config Fun
We had a situation in work where we needed to make service installation a more configurable process.

So a very simple example, In order to install a .NET Windows Service we need to provide it with a username & password that the services will run as. We can either provide that information at installation time, or through the following properties in the ProjectInstaller.cs file for your service.

However in an environment where multiple developers are working on a service, particularly a service that requires elevated privileges and needs to run as a specific account, this can be a royal pain.

Read More “InstallUtil, Windows Services & ProjectInstallers with App.Config Settings”