Mobile Development Handbook

Thu, May 31, 2007, 02:08 PM under MobileAndEmbedded | Personal
Finally, the world gets an up to date book on Mobile Development! You can browse it at amazon or look for it at your favourite book shop online or offline.

Its 600+ pages are spread over the following 18 chapters:
1. .NET Compact Framework—a Platform on the Move
2. Building a Microsoft Windows Forms GUI
3. Using SQL Server 2005 Compact Edition and Other Data Stores
4. Catching Errors, Testing, and Debugging
5. Understanding and Optimizing .NET Compact Framework Performance
6. Completing the Application: Packaging and Deployment
7. Exchanging Data with Backend Servers
8. Networking
9. Getting Connected
10. Security Programming for Mobile Applications
11. Threading
12. Graphics Programming
13. Direct3D Mobile
14. Interoperating with the Platform
15. Building Custom Controls
16. Internationalization
17. Developing with Windows Mobile
18. Introducing .NET Compact Framework Version 3.5 and Visual Studio "Orcas"
I highly recommended you check it out, for example, on the publisher's official book page.

Windows Clippings 2.0

Wed, May 30, 2007, 10:30 AM under Links
Kenny Kerr has released Window Clippings v2.0. Read his announcement here. There is still a free version with all the important features and an advanced version for a truly modest price. Not only I downloaded it, but I paid for the extras as well. If nothing else, I encourage you check it out especially if you regularly do screen captures on Vista!

NET CF Beta 1 – what is new

Sun, May 27, 2007, 08:43 AM under MobileAndEmbedded
With Orcas Beta 1 you also get NETCF Beta 1 with a build number of 7066. The last public NETCF drop was in the January CTP (and remained unchanged in the March CTP) with a build number of 6282. I documented what was new in that build of v3.5 compared to v2.0 and added a couple more later. Those new APIs are all still in build 7066 and in addition we also get the ones below:

* System.Delegate gets a new CreateDelegate static method and the two associated properties: Method and Target.

* There are new types in the System.Security.Cryptography (in mscorlib): AsymmetricKeyExchangeDeformatter (and the Formatter) and RSAPKCS1KeyExchangeFormatter (and the Deformatter).

* X509 in System.dll: X509Store, X509CertificateCollection, ClientCertificates property on System.Net.HttpWebRequest and 4 enums in System.Security.Cryptography.X509Certificates (OpenFlags, StoreLocation, StoreName, X509FindType).

* DataGridCell was moved from system.windows.forms.datagrid.dll to system.windows.forms.dll

In addition to the list above (inc. the ones from my links above), I previously mentioned the headline NET CF features. Well, finally in this Beta 1 drop you can play with those! The LINQ implementation in System.Core.dll is now compatible with the desktop naming and we also get the LINQ to XML implementation in System.Xml.Linq. The Compact WCF implementation resides in the new assemblies System.ServiceModel.dll (dependencies of which include the new System.Runtime.Serialization.dll) and Microsoft.ServiceModel.Channels.Mail.dll. For a "Hello World" example, check out Mark's two blog posts.

If at this point you are ready to play with this stuff, then first visit this download page for two reasons:
1. It includes some additional new features that are not visible at the public API level that I describe in my posts.
2. If you proceed with the download you will actually be able to compile projects referencing the Compact WCF assemblies. Simply remove your existing "Microsoft .Net Compact Framework 3.5 Pre-Release" and install the download (same build number as above, but with correctly signed assemblies).

PDC postponed?

Thu, May 24, 2007, 06:19 PM under Links
Remember when the news broke about PDC07? Go back to my blog post and follow the link again (and weep).

Client Application Services in "Orcas"

Thu, May 24, 2007, 12:39 PM under dotNET | Orcas
I've had on my TOPLAY list to discover what the "Services" tab is for in the project properties for Orcas client projects. If you don't have Orcas installed and are wondering what's behind the "Advanced" button on that screenshot, it looks like this:


It turns out it is for a new feature, which you can read all about on MSDN, which we are calling "Client Application Services". This will be useful to you if in your smart client applications you want to authenticate users (inc. maintaining different roles and profiles) against a central web store (e.g. with webservices etc) including the ability to work offline once the user settings have been retrieved. It is particularly useful if you are using that central web store already for existing web applications because, as you may have guessed, it leverages the same ASP.NET 2.0 services for authentication, authorisation and personalisation.

The claim is that this Orcas feature makes it "trivial" to create the services on the server-side and to then consume them from the client-side. To see if this claim holds true for you, why not check out the walkthrough by Brad over here, inspired apparently from this one over here (both links include project downloads).

There is also an old webcast on the topic here (you can download the wmv), and I would suggest you skip the first 21 minutes of slides and go straight to the 30' demo.

go URLs at Microsoft

Tue, May 22, 2007, 06:24 AM under Random
Have you noticed on various Microsoft web sites and newsletters the use of go.microsoft.com URLs that redirect to the real URL where the content lives? They have always bugged me. Let's look at an example by examining the following two snippets:
"If you are a developer interested in Vista, Orcas and mobile development you'll find that this blog rocks!"
" If you are a developer interested in Vista, Orcas and mobile development you'll find that this blog rocks!"
The two extracts above look identical, and following the links takes you to the same place. However, the 1st shows the real URL, while the 2nd takes you somewhere else and then redirects you. Most people I know (inc. me) hover over a URL before clicking on it. That is because when you mouseover a link, the destination usually appears in the statusbar or a tooltip so you can preview the URL you are about to visit. So, in the case above, maybe I would not click on it because I have already been to that destination and I don't want to waste my time (or maybe I already subscribe etc). Using a go.microsoft.com/?linkid=abcdefg hides that from me. Also if I am offline, I can still get the real URL and potentially add it to a list of places to visit, but I am unlikely to do that with a go URL. While that is my view, recently I heard someone also complain about the go URLs. They were taking it a bit far by saying they were finding these URLs "suspicious". Without commenting here on the comment per se, the net effect is they also don't like them.

So I asked around about the usage of these URLs and the reply confirmed my presumption on why we use these: statistics. That is how we measure what links people follow. There are backend tools that measure the total traffic to a URL, but how can you know where those clicks are coming from, especially when they will originate from someone's email client (in the case of newsletters such as the flash)? I am not a web guy so I cannot see an immediate alternative. Unless/until someone comes up with a better solution, we'll just have to live with this necessary evil I guess...

Import namespace in VB9

Sun, May 20, 2007, 02:10 PM under Orcas | VisualStudio
A cute Whidbey feature in the C# 2.0 editor is that when you type in a Type that is not in scope, the IDE will let you choose to automatically either fully qualify the type or to add the appropriate using statement at the top. The editor for the VB8 experience is not that great, as shown by the following side-by-side screenshot:

BTW, for my C# readers, that is not a mistake, VB does allow partial naming of namespaces so since System is in scope, you can simply type Threading.Thread and it is acceptable. A bad habit IMO, I suggest as a guideline that you fully qualify the types starting at the root namespace.

Recently I was typing some VB9 code in "Orcas" and observed that the VB editor has caught up with the C# behaviour (plus it follows my guideline of the previous paragraph), as shown by the following screenshot:

Nice! And just like any other IDE language feature, it is not just for the latest version, but for the previous version as well (thanks to multitargeting).

System.Data.Linq.dll

Sat, May 19, 2007, 06:19 AM under dotNET | Orcas | LINQ
One of the green bit assemblies in .NET Framework 3.5 is System.Data.Linq.dll. As you may have guessed, this assembly contains the framework implementation for LINQ to SQL. Regular readers will know about my other multiple LINQ posts, but I have never posted about LINQ to SQL (formerly known as DLinq).

So, if you are interested in DLINQ, stay tuned on a series of posts that ScottGu has started here. For a detailed LINQ to SQL tutorial series of videos, check out the output from our local nugget machine (aka MikeT). I have captured here the direct links to the WMVs for the 18 screencasts: Intro, DataContext, Mapping, Tools, Inserting Data, Deleting Data, Updates, Concurrency, Joins, NULLs, Deferred Query Execution, Deferred Loading, Stored Procedures (querying), Stored Procedures (updates), Standard Functions, Custom Functions, Inheritance, Transactions.

More SideShow devices

Sat, May 19, 2007, 03:40 AM under SideShow | Links
It looks like Dan's pit of cool toys is truly bottomless! If you thought the video from CES had a cool collection of SideShow devices, then check out this video from WinHEC.

DevDays 2007 in Netherlands

Thu, May 17, 2007, 04:48 PM under Events
In June 13-14 a popular international developer event in Amsterdam takes place: DevDays.

I have no idea what the conference site says because it is in Dutch, even though the sessions will be in English. Well, they better expect them to be in English because I am doing 3 sessions there and apart from English the only other language I can speak well is Greek :)

The English abstracts for my sessions are:

Two part session (1 & 2) – Windows Vista for Managed Developers: Besides .NET Framework 3.0/3.5
Windows Vista brings with it a fantastic platform for managed development, namely .NET Framework v3 (i.e. WPF, WCF, WF and CardSpace). However, there are many new native APIs (obviously not part of the .NET Framework) in Windows Vista. In this 2-part talk you will discover how you (a C# or Visual Basic developer using Visual Studio 2005 or Visual Studio codename "Orcas") can take advantage of this new functionality. This demo-driven session, will teach you how to make your application feel like a real extension to the Windows Vista platform (and not like a ported application that just runs on it). Vista-only features covered include extending glass into your own applications, the new TaskDialog and CommonOpenDialog, Windows Error Reporting enhancements, Restart API, Recovery APIs, Restart Manager, building power-aware apps, writing preview handlers, conforming to User Account Control (UAC), using search from your application, Sidebar gadgets, SideShow plus more.

Session 3 – Realizing the Potential of the Windows Mobile Managed APIs
Successful mobile applications are designed for mobile users. We will take a comprehensive look at the managed APIs of the Windows Mobile platform for richly interacting with core device features such as Outlook Mobile and learn how to create smart applications with the State and Notification broker. Come see how developer tasks previously requiring lengthy C++ are now achieved with two lines of managed code! Through Visual Studio 2005 (or Visual Studio codename "Orcas"), we will demonstrate using the camera to capture pictures and video, the interception and processing of SMS messages, placing phone calls, dealing with system level events, programmatically sending e-mail and SMS messages, and provisioning devices with XML to name but a few! These APIs are not part of the .NET Compact Framework. They apply equally to Windows Mobile 5.0 and Windows Mobile 6. I will highlight what is new in WM6 in this area as appropriate.

Register here.

Winforms 1 - WPF 0

Wed, May 16, 2007, 09:11 PM under dotNET | Windows | Vista | Orcas
Oh, how happy I was when Orcas started using the Vista CommonFileDialog. Oh, how pissed off I get when applications on Vista still use the old legacy dialog. One of the applications I use a lot is Reflector and for a while I've been nagging Lutz on IM and email to make Reflector use the new OpenFileDialog, but nothing came of my harassment. Until recently when I noticed that Reflector indeed started showing me the new dialog so I thanked Lutz for finally listening. His reply was that he wasn't aware of it and he had changed nothing other than it now forces it to run against 2.0.50727 using a config file. That put me on a hunt!

The result of the hunt was that with the "Orcas" update of v2.0.50727 (remember how I explained this a few hours ago) the System.Windows.Forms.OpenFileDialog has had an internal implementation change that makes it detect if it is on Vista and puts the correct dialog up, rather than the legacy one (on a legacy OS like XP, it will show the old dialog of course). Using reflector, the place to look is FileDialog.RunDialogVista called by FileDialog.RunDialog which is called by CommonDialog.ShowDialog. Great news!

So I then wanted to see if the WPF version has also been updated, in which case half of VistaBridge would be obsolete (the TaskDialog half would still be useful of course). Unfortunately, the WPF version of OpenFileDialog (residing in Microsoft.Win32 namespace in the PresentationFramework.dll) has not been updated. I am confident that it will happen by RTM, but in the meantime from your WPF projects you can reference the System.Windows.Forms.dll and use its Open/SaveFileDialog instead.

"CLR v2.0 remains at the same version"

Wed, May 16, 2007, 11:20 AM under dotNET
One of the things you will hear/see a lot in Orcas talks/articles is that the CLR remains at the same version: v2.0.50727. What is meant by that is that a "service pack type" upgrade will be made which is guaranteed not to break any existing code: just bug fixes and maybe some tiny enhancements that can have no negative side effects and in most cases have to be explicitly taken advantage of from newly written code.

So, on your system navigate to your %windir%/Microsoft.NET/Framework/v2.0.50727 directory. Pick any of the DLLs starting with "mscor", e.g. mscorjit.dll, and look at its full version information. Note that the presence of Fx v3.0 has no effect on the scenarios below or to this post as a whole.
1. If you have installed NetFx v2.0 on XP or lower, the revision will be 42 i.e. full version is v2.0.50727.42
2. If you have installed Orcas Beta 1 on your machine the revision is actually 1318.
3. If you are on Vista (which comes with NetFx 2.0 by default) and have *not* installed Orcas, then your revision is 312 (that's right, it is "the same version" as RTM)

So there isn't much point to this post, other than to highlight/reinforce that when we say it is the same version, we do not count the Revision part – just the Major.Minor.Build parts.

PerformanceData

Tue, May 15, 2007, 04:10 PM under dotNET | Windows | Vista | Orcas
One of the namespaces in the new System.Core.dll is System.Diagnostics.PerformanceData. It is a set of classes that wrap a new set of performance counter APIs (in Advapi32.dll) that are applicable only to Vista and higher. Here is a class diagram followed by an explanation:

Rather than actual code, here are the steps for working with the set of classes above.
1. Create a CounterSet object specifying the CounterSetInstanceType
2. On this instance, call AddCounter specifying an integer id and a CounterType (plus optionally a name) [repeat this step as desired]
3. Once done repeating step 2, call CreateCounterSetInstance to obtain a CounterSetInstance object.
4. On the object of step 3, via its Counters property get an instance of the collection object: CounterSetInstanceCounterDataSet
5. From this collection, retireve the CounterData objects either via the integer id or by name
6. Only one long Value property on the CounterData objects to tell you what you are after

In case you are wondering, step 1 above wraps PerfStartProvider and step 3 wraps three APIs in sequence: PerfSetCounterSetInfo, PerfCreateInstance and PerfSetCounterRefValue. If you look at the native signatures and the "cute" structures they expect you to setup, then you'll realise why it has been wrapped for us :-)

AccountManagement

Tue, May 15, 2007, 03:33 PM under dotNET | Orcas
One of the new assemblies in .NET Framework 3.5 is System.DirectoryServices.AccountManagement.dll (you have to browse on the file system to your Framework 3.5 installation in order to add a reference in VS "Orcas"). It is an extensible managed wrapper with intuitive search that aims to simplify programming with both ADAM and AD – it is based on SDS/ADSI under the hood. I deduced that from a powerpoint deck that you can find in a zip file if you scroll to the bottom of Joe's blog post there (look at slides 18-22, includes code snippets).

I started looking at it and like I always do with new namespaces I drew a class diagram to help me understand it. It turned out to be fairly large so only if you are really interested, have a look here. Better still, for a small piece of sample code, go to Bart's blog post.

Acropolis

Tue, May 15, 2007, 05:32 AM under Links
When I come across Greek codenames internally it always pleases me (sad I know), but of course they cannot be talked about until they are public. It looks like this one is now since it has appeared in the Tech Ed US session list (type "Acropolis" in the keyword box, and then hit the Filter button). Out of curiosity I searched the web and found that there is a reference to Acropolis from over a year ago! So much for the secrecy... :-)

Using Extension methods in Fx 2.0 projects

Sun, May 13, 2007, 03:30 PM under dotNET | Orcas | LINQ
For the importance and context of this blog entry, please DO read my previous blog post including the disclaimer at the top.

The feature I have not explicitly addressed yet is extension methods. If you are a C# developer that has been using the "magic" this keyword read my explanation to understand what we are talking about here. You see, even though extension methods are a compiler trick, they do rely on the new System.Runtime.CompilerServices.ExtensionAttribute introduced in System.Core.dll. Since we've already established that System.Core is a Fx v3.5 assembly and hence is not usable from 2.0 projects, you might think this is the end of the road for extension method usage in 2.0 projects. Let's explore this further.

In a 2.0 Orcas project try and compile the following code:
static class Program
{
//[ExtensionAttribute()]
static void DisplayInterval(this Timer t)
{
Console.WriteLine(t.Interval.ToString());
}

static void Main(string[] args)
{
System.Timers.Timer t = new System.Timers.Timer(2000);

Program.DisplayInterval(t); // long hand usage of method
t.DisplayInterval(); // short hand usage of method (extension)

Console.ReadLine();
}
}
You will see a compiler error as follows:
"Cannot use 'this' modifier on first parameter of method declaration without a reference to System.Core.dll. Add a reference to System.Core.dll or remove 'this' modifier from the method declaration"
What the compiler *really* wants to say is:
"You are using the 'this' modifier and it depends on the ExtensionAttribute that itself resides in the System.Core.dll and you do not have a reference to it"
Once you understand what it is really saying, and once you realise that it only needs this attribute at compile time (since at runtime the IL to be interpreted will still include the call to the utility method in long hand), then it all becomes clear what you need to do next. Declare the attribute yourself! It isn't such a big logical jump (or else I wouldn't have made it :-))

So add to your 2.0 project a new empty code file and paste in it the following code:
namespace System.Runtime.CompilerServices
{
public class ExtensionAttribute : Attribute { }
}
Then, wherever you declare the extension methods, optionally add to the top:
using System.Runtime.CompilerServices;
Now your projects will compile and you can use extension methods!

So summing up the previous post and this one, all 6 language features behind LINQ are usable from Fx v2.0 projects. But the LINQ to objects/xml/data implementations clearly are not usable because they live in Fx 3.5 assemblies. You can of course offer your own LINQ implementations for your own data sources. For example, the following code will compile in a Fx 2.0 project...
using Moth.Linq;
static class Program
{
static void Main(string[] args)
{
var ints = new []{1,2,3,4};
var res2 = from p in ints
where p > 2
select p;

System.Diagnostics.Debugger.Break();
// examine res2
Console.ReadLine();
}
}
...if you also add to the project this (demo) code file here.


BTW, how soon are you guys out there planning to move your existing 2.0 projects to Visual Studio "Orcas"? ;-)

Using C# 3.0 from .NET 2.0

Sun, May 13, 2007, 03:15 PM under Orcas | VisualStudio | LINQ
Please note that this and my next post are based on Beta 1 Orcas bits. Later builds might change the facts so always try it yourselves.

There still appears to be some confusion with regards to the new language features that make LINQ to objects work. In particular, there are claims that it all works with .NET 2.0 and counterclaims that it doesn't. IMO the confusion arises from people not being precise about what they are talking about. I'll try and give you here my view (which of course I think is as clear as can get :-))

To start with, everything here is in the context of Visual Studio "Orcas" – forget earlier versions. Orcas supports multitargeting so you can build projects that target .NET Framework v2.0. So the real question we are addressing here is whether you can choose to build a NetFx 2.0 project that also uses some of the new C#3 language features.

If you are not familiar with LINQ, please go read my detailed LINQ blog posts and then come back. So after reading about LINQ I hope you realise that:
LINQ =
1. local variable inference +
2. object intiliazers +
3. anonymous types +
4. lambda expressions +
5. extension methods +
6. query expressions +
7. framework support.

Let's look at some of the language features. The first 4 do work with 2.0 projects i.e. the following compiles and runs fine in a 2.0 Orcas project:
class Program
{
delegate T Func<T>(T t);
static void Main(string[] args)
{
// object init -
// makes no sense in this example but hey...
Timer t = new Timer(2000)
{
AutoReset = false,
Enabled = true
};

// local var inf, anonymous types
var i = new { Name = "Fred", Age = 6 };
Console.WriteLine(i.ToString());

// lambdas
Func<int> f = j => j + 1;
Console.WriteLine(f(5));

Console.ReadLine();
}
}
Can you spot them? Local variable type inference, object initiliazers, lambda expressions and anonymous types. This shouldn't surprise you if you read my previous blog posts since I have stated clearly many times that these language features are simply compiler tricks. The IL that gets generated is the same old IL – no dependency on the framework and no dependency on the runtime. So 2.0 projects in Orcas can use 4 of the smart compiler tricks, this is good! As an aside, other 3.0 compiler features irrelevant to LINQ such as automatic properties, also work in 2.0 projects.

On the gloomy side, it goes without saying that number 7 above, the "framework support", resides in System.Core.dll and you cannot reference that assembly from 2.0 projects, so no extension method implementations for you in 2.0 projects. If at this point we think of number 6 above, "query expressions" (i.e. from...where...select syntax), we realise that their usefulness is in friendly mapping to the extension method implementations in System.Core.dll (or System.Xml.Linq or Systam.Data.Linq or your own extension method implementations). So even though query expressions are supported when targeting v2.0 projects from VS "Orcas" (the syntax highlighting when you try it is a clue) there is no implementation to map them onto - other than your own. Well, even your "own implementation" implies that you can use Extension methods for v2.0 projects and I haven't addressed that yet (number 5 above). See my next post now.

WindowsClient

Sat, May 12, 2007, 03:13 AM under Links
I have been expecting this website for a while, and AFAIC see, Ian is the first to break the news. Have a browse around the site and expect some even cooler stuff to go up there at some point (I only wish I knew when). Oh, and if you ask me, mobile should have been included up there... I see it as part and parcel of the "client".

System.Xml.Linq

Fri, May 11, 2007, 09:36 AM under dotNET | Orcas | LINQ
Part of .NET Framework 3.5 is a new framework assembly: System.Xml.Linq dll. Now, I know most people describe this in the context of LINQ (it used to be called XLinq) and indeed it works very well with LINQ but I wanted to stress here that effectively this is a standalone new XML API. You can use it without ever going anywhere near the LINQ syntax.

There are 3 namespaces inside the assembly the main one being System.Xml.Linq with 23 types, the most important shown below:

The ones you are most likely to use all the time are XElement and XAttribute (I bet you thought I'd say XDocument but actually you don't really have to use that one!). So why yet another new API for XML? Because this one is really cool! One aspect of the coolness is the way you create XML documents/fragments: You can do that in a single statement where the creation of XML items and their association takes place in the same step! Also while writing that single step/statement, you get to do it in the natural way that you think of the layout of the XML document. For example, in the following screenshot I have captured the code and the document it creates side by side. Can you see how intuitive it is?

Another aspect of the coolness of the API is that you can indeed use it with the LINQ syntax both for creation and for querying. To assist with that there are a bunch of extension methods in 3 static classes: System.Xml.Linq.Extensions, System.Xml.Schema.Extensions and System.Xml.XPath.Extensions. FYI, there are no other types in the Schema and XPath namespaces. I'll let you explore that yourself in the Beta 1 of Orcas.

The coolest thing about this API however is only available to Visual Basic developers. The VB compiler is smart enough to let you type in XML literals while it produces the necessary calls to the new XML classes. The code I showed above in C# 3.0 can be written in VB9 as per the following:

To see more about creating the documents, how LINQ syntax can be thrown in and how VB syntax with XML truly rocks you need some nuggets of course. Well, my colleague beat me to it so I encourage you to view his videos here (he is a bit behind the times using the March CTP so note that adding a reference to System.Core and System.Xml.Linq is done for you in Beta 1 for 3.5 projects).

Multitargeting

Fri, May 11, 2007, 09:30 AM under Orcas | VisualStudio
I have talked about and screenshoted multitargeting before in Orcas. When you create a new 2.0 or 3.0 project, features that are in v3.5 will not be available in your toolbox or properties or the references dialog. What I hadn't realised until today was that you can still see them even though they are not available, which I think is cool. Notice in the following screenshot how System.Core.dll is greyed out in my 2.0 project references dialog.

If you create a project and then change the framework you target to be a lower version than what it was before, you will get compiler errors for anything that isn't present, of course.

Compact Silverlight

Wed, May 9, 2007, 12:53 PM under Links
OK Mark, I'll take the bait! I don't make it a habit to talk about technologies that are so far out, but I guess this very early prototype is worth highlighting to my readers in case you guys have been under a rock for the last 10 days ;-).

Scott has the video he made with Derek on his blog and if you want to see the exact Silverlight demo shown at MIX, then download the WMV (15', 55MB) and fast forward to the 14th minute for the Window Mobile version of the demo shown in the first 14 minutes on the desktop platform. If you want to read more from the dev lead of the Windows Mobile Silverlight prototype (including screenshots) then go to Rob's blog entry (some great stuff there!).

Personally, I want to see how Compact Silverlight will compare to .NET Compact Framework. Sure, one is for cross-platform, cross-browser and the other only for Windows CE but there is an overlap. If all I am targeting is the Window Mobile platform, then I can write smart clients with the NETCF today that do the job nicely. All I am missing is a Windows Forms layer replacement so I can create rich user experiences (rather than dull LOB apps). That is, I want to use my existing NETCF apps and simply remove the UI and replace it with a XAML-based UI – I don't want my app running in the mobile browser and I certainly don't need another CLR. But hang on, isn't that essentially how WPF differs to Silverlight on the desktop? Yes it is, so if you ask me, I'd rather we got Compact WPF instead of Compact Silverlight. Just my 2 drachmas worth :-)

MEDC Europe

Mon, May 7, 2007, 12:59 PM under Events
If you live in Europe and you missed MEDC in Vegas last week, then you have only one week left to register for a great price for the European version, held in Berlin on 25-26 June. I will be repeating my two sessions (share code and GUI tips) and also participating in a panel session.

Details and registration here.

Upcoming Orcas events

Sun, May 6, 2007, 12:03 PM under Events
Me and MikeT will be bringing a joint 2.5 hours of "Orcas" goodness to a free MSDN event near you. For details or to register please click on the links below:
24 May at TVP, AM
29 May in Manchester, AM
5 June in Edinburgh, AM
5 June in Edinburgh, PM

...and don't forget another joint session (23 May) we are doing specifically on LINQ that you can register for at the Fest07 homepage (the day also includes sessions from Rafal Lukawiecki).

Finally, how could I ommit yet another repeat of the popular MSDN Roadshow, delivered by the entire team this time in London (11 June) – register for free here.

Vegas MEDC wrap-up

Sat, May 5, 2007, 12:33 PM under Random
Just came back from a very different MEDC for me this year.

I've been to Vegas a few times before and this is the only time that I didn't venture beyond the Venetian! I pretty much spent all my time at the conference or in my room, with the occasional trip to restaurants (in the Venetian) for breakfast/lunch/dinner. I only had drinks (extremely generous portions of Stoli on the rocks) on Wednesday night at the Venetian's TAO where the conference party was held. Some of us went to some other place in the Venetian after that but I don't recall the name. This resulted in a bad hangover on Thursday morning which soon converted itself to a nasty cold that I brought back with me today. I bet half the attendees came back with a cold because the temperatures in that hotel are sub zero. The other bad news was that since Monday my laptop monitor malfunctioned. It did this last September and it only took the Toshiba technician 10 minutes to reconnect the cable internally but I wasn't going to risk that myself with all the sessions I was doing! I ended up delivering my breakouts by looking at the monitor on the stand rather than my own laptop monitor (external projection still worked, thank God!).

On a more positive note, my breakouts were well received and I enjoyed watching them feature in the Top 10 list monitor in the speaker room :-). This was a special achievement for anyone at MEDC this year since Doug Boling decided to have 4 of his talks dominate the top 5... someone suggested, and I agree, that next year we should only pay him if he gets scores above 8.5 (which is what he did this year!). Thank you to everyone who attended my sessions, thank you to all of you for voting and special thanks to those of you that put up with my bad jokes :-)

On a further positive note, I came back with more cool swag than from any other conference ever: hardware. Some bits I got because I was a speaker, others as a (former) MVP, and others by prior arrangement with Microsoft colleagues in Redmond whom I met in Vegas. Below is the top 5 swag items I have just unpacked:
- Sweet Presenter Mouse
- NETMF Freescale i.MXS Development Kit
- JawBone noise cancelling Bluetooth headset
- Cool laptop web camera
- Windows CE eBox-2300SX Development Kit

Now I'll go find some creative way to keep my eyes open while my body adjusts itself to normal time again...