Virtual Desktops and Applications are not as important as you think

We spend a lot of time optimizing how we deliver desktops and applications. But, the future will trivialize these things as the focus shifts the focus to data and the data moves to the cloud. It is happening now in the consumer market and the trend will infiltrate the enterprise as BYOD continues to become more prevalent.

binary

We spend a lot of time optimizing how we deliver desktops and applications. But, the future will trivialize these things as the focus shifts the focus to data and the data moves to the cloud.  It is happening now in the consumer market and the trend will infiltrate the enterprise as BYOD continues to become more prevalent.

Applications are useless without data

Take a word processing application for example. Without data, the word processing application is really stupid. As soon as you start typing a document, you are creating data.  The application is just a mechanism for creating or consuming data.  And, in a lot of cases, this data is interchangeable between applications.  In other words, it is the data that is important – not the application.

Applications are just a data access layer

I like programming and a staple of any good programming language is object orientation. One of my favorite design patterns is called a façade pattern. The definition of façade is “the face of” something. So a façade in this case is the face of an object. The “face” is easily switched out, but the underlying objects remain the same (loose coupling).

Let’s relate this to applications. Applications are the façade to the data. Let’s take our word processing example again. I personally use Microsoft Word (for Windows and Mac), Google Docs, and iWork Pages. All these programs access the same data and they are easily switched out, so they are the face of the data. Dropbox (and more recently GDrive) keep my data where I need it, so those things are completely different facades to the exact same data. I can get my data on a fat client, web, mobile, offline, etc.

Consumerization and Cloud is driving the trend

Mobile devices have exploded and BYOD is gaining popularity. These 2 trends are directly associated with user demand – not IT demand. Brian Madden put it well on ConsumerizeIT.com – “The new reality: The IT department has to compete against every random app & website out there!”

Let’s look at another example that is more consumer related.  When I purchase an online book from Amazon, I’m paying for the data (book).  I then have a choice of interchangeable applications that can be used as the face of the data – many versions of the Kindle, multiple iOS applications, multiple Android applications, multiple Windows applications, etc.)  The application is much less important than the data.  Consumers are getting used to freedom of choice and everything “just working.”  The same will creep into the enterprise and IT will need to cope.

So now what?

Windows applications aren’t going anywhere anytime soon, so we’ll still be delivering those for quite some time. However, I see where the application is less important and we’ll be thinking more about data security, offline data, application and platform choice (Windows, Mac, Linux, mobile, web, etc.), data integrity, etc.  Or, perhaps I’m way off here.  What do you think?

Further Reading

VDI, ok? What’s next? Stephane Thirion http://www.archy.net/2012/05/31/vdi-ok-whats-next/

The VDI Party is Over. Benny Tritsch http://drtritsch.com/2012/05/the-vdi-party-is-over

Citrix Synergy 2012 Live Blog

It’s time for Citrix Synergy 2012. I’ll be live blogging the keynote again this year. I’m looking forward to hearing about some of the Cloud/multi-tenant announcements and mobility improvements.

It’s time for Citrix Synergy 2012. I’ll be live blogging the keynote here. I’m looking forward to hearing about some of the Cloud/multi-tenant announcements, mobility improvements, and desktop management. Continue reading “Citrix Synergy 2012 Live Blog”

Smooth Roaming + Responsive Design

In this post, we look at adding session reconnection event handling to our responsive design prototype using the Citrix XenApp Mobile Application SDK. Be sure to check out the video of the prototype.

In a previous article, we looked at using responsive design with enterprise applications by utilizing the Citrix XenApp Mobile Application SDK. Jonathan Chin left an interesting comment about hooking up an event handler to apply the responsive design to a reconnection event.  So, I decided to investigate doing just that and, as it turns out, it isn’t that hard.  

In the previous version, the responsive design code only kicked in on session initiation (i.e. logon) – meaning if you started a session on a fat client and then reconnected to the session on a mobile device, then the fat client display would show up on the mobile device. We don’t want that. So, by catching the reconnection event, we can re-style the app at any point (session initiation or reconnection). Start the application on a fat client and then reconnect via a mobile device and the mobile style will kick in (and vice versa).

Here’s the bit of code to take care of it (if you don’t care about the code and just want to skip to the download, just follow this link):

 

[DllImport("WtsApi32.dll")]
private static extern bool WTSRegisterSessionNotification(IntPtr hWnd, [MarshalAs(UnmanagedType.U4)]int dwFlags);

[DllImport("WtsApi32.dll")]
private static extern bool WTSUnRegisterSessionNotification(IntPtr hWnd);

private const int NOTIFY_FOR_THIS_SESSION = 0;
private const int WM_WTSSESSION_CHANGE = 0x2b1;
private const int WTS_REMOTE_CONNECT = 0x3;
private const int WTS_REMOTE_DISCONNECT = 0x4;
private bool registered = false;

protected override void OnHandleDestroyed(EventArgs e)
{
    // unregister the handle before it gets destroyed
    if(registered)
        WTSUnRegisterSessionNotification(this.Handle);

    base.OnHandleDestroyed(e);
}

protected override void OnHandleCreated(EventArgs e)
{
    base.OnHandleCreated(e);
    registered = WTSRegisterSessionNotification(Handle, NOTIFY_FOR_THIS_SESSION);
}

protected override void WndProc(ref Message m)
{
    if (m.Msg == WM_WTSSESSION_CHANGE)
    {
        if (m.WParam.ToInt32() == WTS_REMOTE_CONNECT)
        {
            // The session is in the reconnect state, so style the app for the new session
            setAppStyle();
        }

        if (m.WParam.ToInt32() == WTS_REMOTE_DISCONNECT)
        {
            // The session is in the disconnect state, so close the CMP if it is open
            if (this.cmp != null && this.cmp.IsChannelOpen())
            {
                try
                {
                    this.cmp.CloseChannel();
                }
                catch {}
            }
        }
    }
    base.WndProc(ref m);
}

 

Try It Out Yourself

Want to try it out yourself?  I have made the program and the source available so you can beat it up and come up with some more ideas.  You can download it here.