Visual Studio 2008 featuring Client Application Services

Visual Studio 2008 featuring Client Application Services

One of the neat features that Windows Forms developers get with the .NET Framework 3.5 and Visual Studio 2008 are the Client Application Services.  As both Brad and Daniel have posted about these services piggyback off the ASP.NET 2.0 services for authentication, authorisation and personalisation.  In the past in order to reuse these services in a client application you would have had to do all the hard yards yourself to not only communicate with the necessary webservices but also to cache information locally to support going offline.

To get started using the Client Application Services ignore all the MSDN documentation except the Walkthrough.  I tried to make sense of the documentation and it wasn’t until I found the walkthrough that it all make sense.  Of course now I’ve been through it I can understand the Services tab of the project properties (see below).

image

In the past if you wanted to track application settings centrally you had to create your own settings provider that would communicate back via a webservice.  With the Client Application Services not only is the process done for you, there is even designer support for retrieving central settings via the “Load Web Settings” button on the Settings tab.

image

Perth .NET Community of Practice: Nick Wienholt on Code Generation

Perth .NET Community of Practice: Nick Wienholt on Code Generation

Next week Nick Wienholt will be in town to present his session on Code Generation.  The details are (full details on the user group site here):

Real-World Code Generation with Nick Wienholt

  • Topic:            Real-world Code Generation with Nick Wienholt
  • Venue:          Excom, Level 2, 23 Barrack Street, Perth
  • Date/Time:  Sept 6th, 5:30pm
  • Cost:           Free. All Welcome.

The user group is also organising a geek dinner at Arirang (Korean BBQ) on Barrack street.  As this will be my last user group before I head off to Sydney it would be great to catch up with as many of you as possible.  If you feel like coming please email Mitch and let him know (btw it’s pay-your-own) 

Silicon Beach House gets a Blog

Silicon Beach House gets a Blog

A big thanks to Dave for getting the website up and running for the Silicon Beach House.  Feel free to subscribe to the blog to find out what’s going on in the house.  Unlike Big Brother there are no cameras, so no live feeds (although I’m sure that Bronwen will post some videos from time to time), and of course we don’t evict people (well at least we haven’t had to as of yet).

If you are involved in an IT company looking for space in the central Perth CBD please feel free to contact me as we still have a couple of spaces available for suitable tenants 😉

Visual Studio 2008 Beta 2 Sync Services

Visual Studio 2008 Beta 2 Sync Services

It’s taken me a while to get around to exploring what’s new with the Microsoft Sync Services in Beta 2.  Given how far they had got with Beta 1 I half expected this to be pretty much baked.  Unfortunately this is definitely not the case.  Without spending too much time the following issues really prevent the designer from being any use at all.

  • Doesn’t return tables that aren’t in the default dbo schema. This is severely limiting, particularly if you are interested in using either the AdventureWorks or AdventureWorksLT databases as part of your investigation into how the Sync Services work.
  • Tables are not marked as BiDirectional. Despite setting the client option “Data to download” to “New and incremental changes after first synchronization” it appears that all the SyncTables are left with the default value of DownloadOnly. Although this is quite a simple fix, it needs to be done when the syncTables are being initialised.  Luckily the team have fix one bug which means the OnInitialized method does get invoked which you can override in a partial class to set the Direction property of the syncTable to BiDirectional eg:
Partial Public Class LocalDataCache1SyncAgent
    
    'TODO: Add initialization code here. OnInitialized() is invoked after the CTOR is called.
    Private Sub OnInitialized()
        Me._personSyncTable.SyncDirection = Microsoft.Synchronization.Data.SyncDirection.Bidirectional
    End Sub

End Class

Another Entity Framework Beta

Another Entity Framework Beta

Yesterday the ADO.NET team announced Beta 2 of the much anticipated Entity Framework and support tools.  Whilst the initial impressions from using the new designer were good, it quickly became evident that the necessary “back-to-the-drawing-board” has really cost the team. 

For example in previous CTPs you could convince the framework to talk with a SQL Server Compact Edition database by simply modifying the app.config file – this no longer works.  Connecting to the AdventureWorks database mostly works but there are fields that it fails to wire up correctly.

Interestingly enough, in previous versions the entity framework was driven by model files with code being dynamically generated straight into an assembly.  In this beta a designer file is generated which contains the class definitions.  Also, the three model files have now been combined into a single .edmx file, although the three sections are still evident in the xml schema. 

Imho the whole entity framework doesn’t go far enough – there should be a divide between your class model (ie what gets compiled into your assembly) and your data model (ie what is in the database and might need to be changed in isolation from your application).  The latter should be deployed with your application and the entity framework should dynamically load the mapping between the data store and your classes at runtime.  This would decouple your application from any schema changes such that any change would simply require a change to the mapping.

NUnitLite V’s Visual Studio Testing for Devices

NUnitLite V’s Visual Studio Testing for Devices

Most .NET developers would have heard of, or have used, NUnit for unit testing code.  Well, last week Charlie Poole made the first release of NUnitLite which is a cut down version that is compatible with not only the full .NET Framework but also all versions of the .NET Compact Framework.  Neil has already posted on how you can get started writing tests for your mobile code so I won’t bore you with that. What I wanted to do is just highlight the differences between using NUnitLite and the new support for device application testing that has been added to Visual Studio 2008.

Support for testing .NET Compact Framework code has been added to Visual Studio 2008 and is feature complete afaik in VS2008 Beta 2.  The biggest limitation, and imho a significant oversight by the product team, is that you have to have your device connected to the computer running visual studio 2008 for the entire duration of the test.  Clearly this means that you can’t test anything to do with connectivity, network availability, suspend/resume capability, application restart etc.  Whilst you can unit test a large proportion of your code this functionality really doesn’t add a huge amount of value.  In the past you could simply create a desktop project, include the same code files and run the tests on the desktop and be fairly confident that a pass on the desktop would equal a pass on the device.  The areas where this isn’t necessarily true are of course the boundary areas such as connectivity, battery life, suspend/resume behaviour etc – none of which can be tested with the included support for device testing.

This is where NUnitLife can come in handy – as it can be used to run tests on the device independently of the IDE it means you can disconnect the device, or even power off the device before, after or during test execution.  The results can be written to a file locally (as Neil illustrates in his post) and then manually reviewed at a later date.

What would have been good would have been for Microsoft to have built a device test runner that a series of tests could be sent to the device, executed at some point either straight away or after some initialisation had been completed and then the results sent back to the TFS server at some point in the future.  This would allow true application testing on the device.

HTC Touch In Action

HTC Touch In Action

A couple of weeks ago I posted about my latest device, the HTC Touch, in which I covered the unboxing and the general form factor of the device.  Since then I have been using the device in place of my ever trustworthy K-Jam.  Whilst I’m still not convinced that I can get away with not having a keyboard I have for the most part learnt to adapt.  This is made easier with the swag of neat features the HTC Touch has to offer.

home screen1home screen2home screen3

The “HTC Home” Today screen item is one of the nicest features. The large clock display is clearly readable at a distance and the icons for unread email, sms and missed calls are a useful addition.

Clicking the sun icon in the middle brings up the current weather for the city you have chosen.  Unfortunately Perth isn’t in that list but this feature will be useful when I move to Sydney at the beginning of September. The across arrow toggles between single day and multiple day weather mode.

home screen4home screen5home screen6

The third tab is the Launcher which provides quick access to 9 frequently used programs or settings pages.  The last icon, the circle with a cross in it, toggles the launcher into delete mode where you can remove programs from the launcher by clicking on the icon you want to remove.  Then when you toggle out of delete mode you can simply click on the + icon to select a new program to fill the vacancy.

htctouchnavigation2htctouchnavigation1htctouchnavigation3

One of the coolest features of the HTC Touch is the iPhone-like navigation system. Wherever you are on the device if you drag you finger from the bottom of the screen (starting in the soft-key area where the menus are) up the length of the screen (you need to apply a reasonable amount of pressure), the navigation screen rolls into view.  Depending on which screen you used last you will see one of three screens as shown above. 

The first screen is another launcher with 6 of the most commonly used applications.  On the second screen you can nominate 9 of your most frequent contacts – I like the integration with the Contact’s photos on this screen.  Lastly the media screen provides quick access to the media on your device.

htctouchnavigation4 audiomanager1 audiomanager2      

In the case of audio the Music option has support for controlling the current playback with integrated controls.  Clicking on Music takes you to the Audio Manager that allows you to configure playlists and manage your audio files.  It also has a player that can be used in place of Windows Media player.

task manager    fitaly

The last couple of features I want to mention are the HTC Task Manager and the Fitaly keyboard.  Integrated into the title bar the HTC Task Manager give you the ability to switch to and terminate running applications.  This is particularly useful on this device as it is severely constrained by the amount of memory for program execution. For anyone working with a keyboardless device the Fitaly virtual keyboard is a life saver.  Organised based on the frequency of letter usage, rather than the legacy qwerty layout, this keyboard enables the mobile warrior to get the most out of their device.

Linq Differences

Linq Differences

This morning I was reading a blog post by Neil Cowburn, of OpenNETCF fame, that talked about the lack of support for Linq in the Outlook object model for the .NET Compact Framework/Windows Mobile.  Having played around with Linq a while ago I was surprised that there was an issue with running a query over the Outlook object model since in theory Linq queries can be run over any collection that implements IEnumerable. Neil’s code, as you can see from his post, is very similar to the following 

            OutlookSession outlook=new OutlookSession();
            var nicks=from c in outlook.Contacts.Items
                       where c.FirstName.StartsWith("Nick")
                       orderby c.LastName
                       select new{c.FirstName,c.LastName,c.Email1Address};

            foreach (var n in nicks)
            {
                MessageBox.Show(n.FirstName);
            }

This code reports the error: “Could not find an implementation of the query pattern for source type ‘Microsoft.WindowsMobile.PocketOutlook.ContactCollection’.  ‘Where’ not found.  Consider explicitly specifying the type of the range variable ‘c’?” Following the directions the Linq statement can be changed to the following which explicitly defines the type of the range variable ‘c’:

var nicks=from Contact c in outlook.Contacts.Items ....

With this change the code compiles and executes as you would expect.  Now lets look at the same thing in VB.NET:

        Dim outlook As New OutlookSession
        Dim nicks = From c As Contact In outlook.Contacts.Items _
                     Where c.FirstName.StartsWith("Nick") _
                     Order By c.LastName _
                     Select c.FirstName, c.LastName, c.Email1Address

        For Each s In nicks
            MessageBox.Show(s.FirstName)
        Next

At first this seems ok, it compiles and executes as expected. However after making some changes to the project I realised that a compilation error was being thrown: “Option Strict On disallows implicit conversions from ‘Object’ to ‘Microsoft.WindowsMobile.PocketOutlook.Contact’.” Initially this seemed reasonable since one of the changes I had made was to set Option Strict to true (a MUST for all VB.NET developers). The problem here is that if I changed the type of ‘c’ to Object then I don’t get strong type checking for all property accessors I use in the remainder of the Linq statement, so what I need is a collection that returns Contacts instead of Objects.  Looking at the definition of outlook.Contacts.Items, which is a ContactCollection, reveals that it only implements IEnumerable and not IEnumerable<Contact>, instead there is a GetEnumerator() which returns a ContactCollectionEnumerator.  Unfortunately this doesn’t help me much and I had to manually casting each of the ‘c’ references.

So, the question I asked was why doesn’t the C# code complain about this type conversion?  Well it appears that the C# implementation of Linq behaves slightly differently in that it filters the items in the collection in a similar way to the As operator does.  If you were to manually iterate through the contacts you would use something like:

Contact c = unknownObject as Contact;

to make sure that c was either a Contact or null.  You would then execute the Where clause followed by Selecting the relevant fields.  Imho this is a much cleaner implementation that the VB.NET code, which again limits the developer, forcing them to write much more convoluted code.

Update:  Thanks to fellow MVP and VB.NET Linq guru, Bill McCarthy, I am back on the straight and narrow.  Changing the Linq statement to:

Dim nicks = From c In outlook.Contacts.Items.Cast(Of Contact)() _

shows similar behaviour to the C# code.  You will notice that I’ve also dropped the “As Contact” which was in the previous code.  As Option Infer is set to true the type of ‘c’ is automatically inferred based on the type of collection items.  Bill pointed out that this explicit implementation of type filtering a collection is much better than the C# implementation where you might accidentally filter a collection – unexpectedly getting no elements returned because you were casting to the wrong type, instead of getting a compile error warning you about the type mismatch.

Visual Studio 2008 Usability Video

Visual Studio 2008 Usability Video

Following my previous post on Expression Blend where I was whining about poor usability I took the opportunity to check out Daniel Moth’s video on Visual Studio 2008 Aesthetics and Usability.  Although there is nothing earth shattering about the video it does illustrate the the VS team is listening to common developer pain points:

  • Vista UAC compatibility
    • No startup prompt
    • Prompt when Administrative privileges are required
    • (Administrator) added to VS title bar when running as Administrator
  • Vista UI
    • Standard Vista dialogs (ie open file)
    • Ctrl-tab – previews of files
    • Rounded corners on selected items
  • General Usability
    • Open folder short cut on solution explorer
    • Add new dialog – sorted alphabetically
    • Sorting/Optimising “using” statements
    • Restart Manager aware – will restart to same state (including cursor position!)

Check out the video across on Channel 9

.NET Compact Framework Answers Here

.NET Compact Framework Answers Here

Well actually not quite here – you will have to wait for the .NET Compact Framework Chat to be hosted by Neil Cowburn, of OpenNETCF fame, on the 29th August.

If you have some burning .NET CF, or other mobile development, questions then you should book mark this chat as there will be a swag of MVPs, Microsofties and of course the OpenNETCF team there to answer them.

You can enter the chat here: http://chat.opennetcf.com/
August 29, 6pm – 7pm (London), 10am – 11am (Redmond)

Neil has also committed to making a transcript of the chat available via his blog for those people, such as myself, who might prefer to get some sleep at that time of day.

Expression Blend is NOT Visual Studio for Designers

Expression Blend is NOT Visual Studio for Designers

Around the time that Visual Studio 2005 and SQL Server 2005 were launched it appeared that Microsoft was clearly making the Visual Studio IDE the platform of choice for all developer tools.  Unfortunately (well this is yet to be seen) no one thought to tell the Expression team as it appears they have completely broken tradition with their user interface.  I haven’t actually gone and investigated to see whether they have in fact reused the VS shell but as far as I’m concerned it doesn’t matter whether they are using it or not as they seem to have broken all the conventions that the VS IDE brings to the table.

Just a couple of things I noticed in the first 30 seconds of working fighting Expression Blend:

  • Right-click seems to be a no-no, except where it’s allowed.  It would seem that there were are few Apple users on the Expression team that decided not to use the right mouse button.  For example right-clicking the tabs, which under VS gives you options such as Save, Close, Close All, Close All But This… Unfortunately this isn’t consistent as some objects do have a right-context menu.
  • The Window menu, which again under VS has a whole bunch of nice options, is again useless.  In particular if you want to Close All Documents
  • Lastly the windowing system in Expression Blend sux in comparison to the standard VS shell. In VS 2005 a lot of work went into allowing the user to pin/unpin, drag and rearrange the window layout to how they wanted to work.  In Expression Blend there is two default layouts, Design Workspace and Animation Workspace, and windows can be fixed or floating. 

I can understand why Microsoft has taken on a “designer” over “developer” approach to Expression Blend so as to attract designers across to working with WPF/Silverlight but I suspect that there are going to be just a few developers out there like me who spend just a few minutes cursing the lack of standard features in Expression Blend.  With only limited designer support in VS 2005 for WPF and Silverlight most developers will, at least initially, have to spend at least some of their time in Expression Blend.

Oh, and this post is courtesy of some time spent poking around Vincent Vergonjeanne’s BubbleFactory source code which he has kindly posted here at CodePlex.  Anyone interested in Silverlight should consider subscribing to the SilverlightOz mailing list, kindly hosted (in addition to the OzTFS mailing list) by Readify.

Perth kthxbye, hai Sydney

Perth kthxbye, hai Sydney

Agrh, damn you LOLCODE – whilst I’m definitely no convert I thought this a fitting title for this post where I am revealing that I’m packing up and moving (again).  This time the destination is Sydney for an indefinite period!


So, why the move? Well essentially it comes down to work – Intilecta is going in leaps and bounds, with the second version of our product now complete.  Where we now go with the product is up for discussion and there has been a lot of talk about us doing a mobile version of the product – something I have been prototyping for a few months now.  The hope is that with me based in Sydney we can seize some important opportunities to expand in this space, capitalising on the hard work that has already gone into the core product.


Am I sad to be leaving Perth – absolutely!  With everything that is currently going on Perth is definitely an awesome place to live at the moment.  With Al and Mitch driving the user group, the weekly coffee and of course Silicon Beach House I have been really enjoying being part of such a vibrant industry.  That said, Sydney brings with it a host of new opportunities and it means that I can catch up with everyone I missed seeing at this year’s TechEd.  I will always call Perth home and hope to return frequently to visit family and friends.


The next question is when am I leaving?  The move is happening very soon and although a firm date hasn’t been set, it will most likely be the weekend of the 8/9th September (yes, it’s not very far away indeed).  I will however be back in town for the week between the 27th Sept and the 9th Oct. This timing works particularly well as it means I get to attend the September user group meeting, where Nick Wienholt will be presenting his session on Real World Code Generation, and it means I’m back in Perth for the October meeting – you never know, they might even get me to present as a “guess from the East” 😉

WebJam does Perth

WebJam does Perth

This evening I attended my first ever WebJam, which was held at the Velvet Lounge in Mt Lawley.  For those who haven’t been to a WebJam the basic idea is that a number of people get up and present on something web related for 3 minutes.  During the evening attendees get to vote via SMS on which presentations they liked.  At the end of the evening prizes are given our to the top three presenters and a random selection of voters.

Having just returned from the Imagine Cup it was great to see such an innovative group being fostered in our own backyard.  Of course it goes without saying that the Silicon Beach House was well represented with Myles, Richard and Bronwen all presenting.  In fact, Richard and Simon with ICARUS took out first place with their 3D rendering of the Scouta database.

In other news: If you haven’t already voted ‘Perth’ for the location for Podcamp then head over to the Podcamp.Info website and place your vote today.

When is a Storage Card an SD Card or a CF Card on Windows Mobile

When is a Storage Card an SD Card or a CF Card on Windows Mobile

A discussion I was party to alerted me to an interesting issue when writing file to a Storage Card on a Windows Mobile device. On most devices a storage card will appear as “Storage card” both in File Explorer and via code.  However, apparently this is not a rule that you can rely on and that on occasions the storage card might be called “SD Card”, “CF Card” or even “CF Card 2” (this is not an exhaustive list of all the options). 

So, you might ask – how do I locate the storage card?  Well you can do this my iterating through the folders at the root of your device.  For example (thanks to Ilya Tumanov from Microsoft for this code snippet):

For Each directory As String In Directory.GetDirectories(“”)
  If ((New DirectoryInfo(directory)).Attributes And FileAttributes.Temporary) <> 0 Then
     Console.WriteLine(“Found storage card: {0}”, directory)
  End If
Next

Visual Studio and Vista UAC with Open With Command

Visual Studio and Vista UAC with Open With Command

One of the issues of doing development with Visual Studio under Vista is that there are some cases where you need to be running Visual Studio as Administrator.  Normally you do this by right-clicking “Microsoft Visual Studio 2005” from the Start menu and selecting “Run as administrator”. UAC will then kick in and prompt you.  Once you dismiss the prompt you can then open your solution and continue to work with administrative privileges.

Unfortunately I generally don’t work like that as we have a single directory where our solution files are stored and I usually open Visual Studio by double-clicking the appropriate solution file.  If you right-click the solution file there is no obvious way of opening the file with administrative privileges (the equivalent of “Run as administrator” but for opening a file). 

To get around this I attempted to create a shortcut to DevEnv and set it to “Run as administrator” in its properties.  This works if you double-click the shortcut or if you use the Open With right-click menu item to open a solution file.  What it doesn’t do is remember this option in the list of Open With programs for that file type (unless you check “Always use the selected program to open this type of file” which is not what you want since you don’t always want to run devenv with admin privileges).

The solution to this is actually to use a console application, which Neil had conveniently already written, to effectively invoke devenv with administrative privileges as well as passing in any command line arguments (ie the solution you want to open).  Now, after using Open With and selecting this console application, I have an additional option in the Open With menu that allows me to “Start VS As Admin”.

image

Update: There is a slight bug in Neil’s code in that the arguments need to have parenthesis around them otherwise file names won’t be properly interpreted if the path has a space in it.

Going Keyboard-less with the HTC Touch

Going Keyboard-less with the HTC Touch

On my way home I had a transit stop in Singapore airport which is a dangerous place if you haven’t slept much for a week and you spot a cool piece of technology.  Earlier this week I had the opportunity to play with the iPhone and whilst I was impressed with the overall look and feel (due credit must be given to Apple for again hitting the spot in that regard) I still can’t get enthused about a device you can’t build applications for, change the battery or even the SIM card. The HTC Touch on the other hand is a device that simply has to be admired.  Despite Microsoft making it hard for device manufacturers to compete against the Apple iPhone (after all lets face it whilst the Windows Mobile 6 UI upgrades were a pleasant relief, they don’t go anywhere near far enough) HTC have really stepped up the game in the Windows Mobile arena.  Here’s just a few of the shots I took whilst unboxing:


  box topbox diagonal


First impressions of the box are that HTC have again done a great job when it comes to the user experience.


boxesopening the box


The story gets even better inside the box


headphonesmicro sd card


A close up of the device packaging


inside the boxwhats in the box


Now lets see what’s really in the box


     front viewback shot


The device, back and front


inside the back cover


Getting the back plate off is a bit clumsy but easy enough


card slots


The SIM card and MicroSD card slots are hidden by a silver side beam (unfortunately not very clear in this picture)


camera and mic


The camera is only 2M but takes an adequate shot for most cases


    side shot - baseside shot - cameraside shot - topside shot - volume (2)


Various side shots showing the different aspects of the device.


home screen


The HTC Home screen looks great!


home_screen   


There is even support within Pocket PC Controller.


More to come on functionality and the usability side of the HTC Touch…..

Visual Studio 2008 Customer Experience Improvement Program gets a Face Lift

Visual Studio 2008 Customer Experience Improvement Program gets a Face Lift

The first time you open Visual Studio 2008 (update: or 2005) you will notice that an icon appears in the taskbar:


image


Clicking this icon opens up the invitation to join the Customer Experience Improvement Program.  I the past this dialog has been fairly wordy describing what the program is about.  As you can see from the following dialog it now clearly indicates what information Microsoft will collect and what information will never be collected:


image
I must admit that I normally decline to participate in the improvement program for applications that are RTM.  However with beta products I always say Yes as I figure the more information I provide Microsoft about how I use Visual Studio the better they can make the product. Funnily enough, if you do decide to change your mind you can always bring this same screen up again by following the instructions and selecting Customer Feedback Options from the Help menu.


Update: This is the same dialog that appears in [VS2005] – not sure why but when I saw it under Orcas I thought it had been refreshed…..oh well.

Multi-targeting with Visual Studio 2008

Multi-targeting with Visual Studio 2008

Over of the perhaps over hyped features of Visual Studio 2008 is the ability to create, or work with existing, .NET Framework v2.0 applications.  One of the pain points of previous upgrades to Visual Studio is the need to migrate to a compatible version of the .NET Framework.  For large applications this can be a time consuming process to not only upgrade the codebase but also ensure that no functionality has been broken.  Unfortunately whilst it would be great for Microsoft to provide a perfect upgrade wizard that would guarantee that no bugs are introduced, the reality is that this is not practical and as such many organisations decide to defer the upgrade until a suitable break in their shipping cycle (for example after a major release). This has resulted in many organisations still working with .NET Framework v1.1 applications using Visual Studio 2003 – which is far from a current/productive IDE!

As part of a continuous movement by Microsoft to separate the framework from the IDE the next installment of Visual Studio, codename Orcas, allows developers to work on legacy applications whilst still taking advantage of the significant improvements in the IDE. This is something that mobile application developers have had with the compact framework since Visual Studio 2003 where we could build both v1 and v2 .NET Framework applications within the same IDE.

Last weekend when I was preparing to leave for Korea I extracted the latest source code from subversion to my personal laptop – thinking that I would take just the one laptop with me.  When I rebuilt this laptop I only put Visual Studio 2008 Beta 2 following the lead of a number of Microsofties and as a way of forcing myself to become familiar with the changes in preparation for writing the second edition of the Professional Visual Studio book.  I opened up one of our existing .NET Framework v2 solutions and got an ugly surprise when it prompted me to go through the upgrade wizard – upgrade? but I thought that I could continue to work with v2?  Not having the time to work out what it was going to do I decided that it would be best to take both laptops with me and it has taken me until now to go back and investigate.

This time I decided to proceed through the upgrade wizard, despite it not informing whether it was going to upgrade to v3 of the .NET Framework or whether it was just going to upgrade solution and project files. It also didn’t give me the option to backup the existing files, which I could have sworn was a feature of previous upgrade wizards. At the end of the wizard I checked the show log file option, revealing that the wizard does very little indeed.

image

From the conversion report it appears that both the solution file and all project files were converted.  However, the scan of all files contained in the project revealed that none of them needed to be upgraded.  I wonder if necessary upgrades are documented anywhere?  This will require further investigation when I’m not flying above the clouds and am back online.

Wanting to investigate this further I decided to do a diff and see what had been changed in the solution and project files.  Starting with the solution file it appears that only the header is upgraded:

From:

Microsoft Visual Studio Solution File, Format Version 9.00
# Visual Studio 2005

To:

Microsoft Visual Studio Solution File, Format Version 10.00
# Visual Studio 2008

This makes sense as it will ensure that the upgrade wizard isn’t run the next time I open the solution file but what happens when I open the solution in [VS2005]?  Again, further investigation required.

Now for the project files… It appears that there are a couple of additional attributes and elements that have been added to the project file (bold indicates additions):

<Project DefaultTargets=”Build” ToolsVersion=”3.5″>
<PropertyGroup>
  ….. {existing elements} ……
  <FileUpgradeFlags>
  </FileUpgradeFlags>
  <OldToolsVersion>2.0</OldToolsVersion>
  <UpgradeBackupLocation>
  </UpgradeBackupLocation>
</PropertyGroup>

Now I’m presuming that old versions of MSBuild will simply ignore these new attributes and elements? More investigation required to determine both what each of these tags means (other than the obvious) and whether there is any level of backward compatibility.

Clearly whilst this feature is a key selling point for upgrading to Visual Studio 2008 I think that unless Microsoft ensures backwards compatibility there will still be a number of organisations that hold off upgrading.

Imagine Cup: The Judge’s Pick

Imagine Cup: The Judge’s Pick

Most people that I spoke to who watched the software design final of the Imagine Cup were a little surprised with the results. To be honest my preferences would have been different but in hindsight I think I can see the rational behind the result.


One of the key judging criteria was around design of the solution which can be broken further into the level of innovation and the impact it would have. Innovation being what sets the solution apart from existing products/techniques and the creative use of technology to address the identified problem. The level of impact is determined by looking at the breadth of people that could benefit and the significance of the solution to that group of people.


In the case of Serbia, who have clearly done the most work out of all the teams in the finals, the concept of a driving simulator is not that new (since we have all played a racing game at some stage) and their solution is simply incremental improvements on an existing concept. Whilst most people could benefit from using such a simulator when learning to drive, there are other techniques for learning to drive that are adequate, so in terms of impact this solution would rank quite low. I’m sure that despite not being in either the top 3 or invited to the Accelerator these guys will go on to be really successful with DriveOn.


The other team that had a really polished product was Austria with their evolutionary electronic whiteboard. Think Microsoft Surface but designed for the class room and without the $10K price tag. I say evolutionary because despite being completed to the point of being a shippable product, their solution really does innovate, mearly extending existing electronic whiteboard functionality. Further, the level of impact is low as it is a tool for teachers to use with their existing teaching process. Again I would hope that these guys go on to sell this despite not having the opportunity to attend the Accelerator.
Most people agreed that what the Thai team had to offer was both innovative, as it took text and rendered it as a series of images, and had deep impact, as it potentially enables the large population who are unable to read, to read.


Similarly the Korean team with their custom built electronic sensory gloves demonstrated significant innovation. Clearly the level for impact for a select group of people is second to none. However as someone pointed the theme was “… better education for all” which is perhaps why they ended up in second.


I think the big surprise for a lot of people was that Jamaica pipped aireland for third place. On the one hand Ireland had a solution that really innovated to help people learn sign language using sign recognition via a low budget web cam but again it could be argued that this only impacts a select group of people and I think that the team needed that extra bit of bite to their presentation. On the other hand you have the Jamaica team that on the surface didn’t appear to be that innovative. However, they had probably the best (with perhaps the exception of the Mexican team) presentations and attempted to deliver on a vision that would truly deliver a better education for all.


The other thing to bare in mind regarding the final stage of the competition is that the judges are primarily business, rather than technical, leaders. This means that you need to sell the vision, sell the solution and sell the team. I would suggest that at each stage in the sofware design competition the focus moves away from the technical, towards the business. For example at the national finals the students might have been expected to show code, or discuss in detail their architecture. In the early rounds of the finals they might have been asked about the high level architecture but the focus was more on their use of technology. Then lastly in the finals the focus was more on being able to identify a problem and execute on building a solution to address said problem.

Imagine Cup: Awards Ceremony and Results

Imagine Cup: Awards Ceremony and Results

Today is the final day of the 2007 Imagine Cup world finals and I’m currently sitting in the front of the Vista hall (appropriately named given it’s an MS event). Before going through the winning annoucement I would like to echo the words of Shin-ll Kim that all the students regardless of how far they got in the finals “are winners”. The quality of submissions this year are all of an exceptional standard and really do reflect the cream of students from around the globe.

With 344 students from 65 countries the atmosphere in the room was amazing prior to the announcements. And the excitement increased through the introductory remarks, a traditional dance and a martial arts routine.


The results for the Photography category:
1st – Team Maraqja, Poland (Iwona Bielecka, Malgorzata Lopaciuk)
2nd – Team Black and White, Croatia (Aleksandar Kordic, Igor Matosa)
3rd – Team Awesome, Canada (Patrick Struys, Ryan Marr)


The results for the Short Film category:
1st – Skylined, Poland
2nd – Team Circle, Taiwan
3rd – Papa-Paçoca, Brazil


The results for the Interface Design category:
1st – Team OOT Graphics Studio, Austria (Verena Lugmayr, Claudia Oster)
2nd – Team FrontFree Studio UI, China (Dongjing Yao, Yushi Ma)
3rd – Team Atomnium, France (Manon Gaucher, Flavien Charlon)


The results for the Project Hoshimi category
1st – Team OIA, Argentina (Pablo Gauna, Nicolás Alejandro Rodriguez Vilela)
2nd – Team Arenium, France (Laure Portet, Régis Hanol)
3rd – Team vladan.simov, Serbia (Vladan Simov)


The results for the IT Challenge category:
1st – Zhifeng Chen, China
2nd – Romain Larmet, France
3rd – Llie Cosmin Viorel, Romania


The results for the Algorithm category:
1st – Team Psyho, Poland (Radoslaw Czyz)
2nd – Team Roman, Ukraine (Roman Koshlyak)
3rd – Team SzSz, Hungry (Szilveszter Szebeni)


The results for the Web Development category:
1st – Team APB, France
2nd – Team Red Dawn, Ireland
3rd – Team FrontFree Studio – Web, China


The results for the Embedded Development category:
1st – Team Trivent Dreams, Brazil
2nd – Team Aether, Romania
3rd – Team SEED, China


The results for the Software Design category:
1st – Team 3KC, Thailand
2nd – Team En#605, Korea
3rd – Team ICAD, Jamaica


BT Innovation Accelerator program: In addition to the prizes, the Imagine Cup also acts as a feeder to the BT Innovation Accelerator program to which 6 teams will be invited to participate. This program has been setup as a partnership between BT and MS and seeks to take the student projects and catapult them forward. The top 3 student projects automatically qualify for this program which leaves 3 spots open to any other team at the world finals. Earlier this morning I was fortunate enough to provide my thoughts as to which additional teams should go through to the accelerator. The 3 teams that were just announced are:


Ireland – As I mentioned in my previous post on the final 6, the Irish entry was clearly innovative and represented just the beginning of an idea that can go much further.


Mexico – After not qualifying for the second round a number of judges felt this team had all the ingredients to really benefit from being involved with the accelerator.


Poland – A number of projects included use of Microsofts multipoint technology that allows multiple mice to be used on a single computer. What the Polish team did was truly innovative as it not only allowed multiple cursors (on a single computer) to be controlled remotely across a network and for each cursor to maintain its own in focus window. Of course by itself this wouldn’t be that valuable as the remote user wouldn’t be able to see what they are clicking, so the team also built in remote sharing capabilities. A remote user could connect to any number of desktops and use Shift-Tab to switch between them – very like using Alt-Tab to switch between programs.


Congratulations to everyone who competed in this year’s Imagine Cup. Next year is in France and the theme is the Environment.