# Monday, October 24, 2005

DDD Day 2 Wrapup

I really enjoyed DDD Day 2 on Saturday. I hope my session was useful and can help raise some interest in the possibilities (and challenges) provided by using Bluetooth for peer-to-peer networking. My slides are available to download here:-

BluetoothDDD2.ppt (107.5 KB)

Since I'm new to public speaking I'd really appreciate your feedback on the session so that I can improve my technique. There is an online feedback form on the DDD Day 2 website which I encourage all attendees to spend a few moments on.

It was difficult to choose which sessions to pick as there were a few clashes on my must-see list. Also some of the sessions had a limited capacity and required registration, which filled up very quickly. But those other sessions I did catch were very interesting, the Avalon and AJAX sessions were quite inspiring. Many of the other speakers and attendees are posting their thoughts on the event, there are also some photos.

#    Comments [4] |
# Tuesday, October 18, 2005

Installing .NETCF 2.0 Runtimes

Marcus has posted some instructions on installing .NETCF v2.0 runtimes to a Windows Mobile 5.0 device. Of course you may wish to deploy to Pocket PC 2003 devices too, again it's a RAM install, and you can follow the same basic steps. There are a few points to note:-

  • You can still build an Autorun in .NETCF v1.0 code as all Pocket PC 2003 devices will have at least the RTM release of v1.0 in ROM. Autorun on devices with multiple card slots can be flaky this was improved in v5.0
  • The CAB file for Pocket PC 2003 is much larger (5.1mb) since Pocket PC 2003 doesn't support compressed CAB files. By default you'll find it here:-

C:\Program Files\Microsoft Visual Studio 8\SmartDevices\SDK\CompactFramework\2.0\v2.0\WindowsCE\wce400\armv4\NETCFv2.ppc.armv4.cab

  • The Autorun code will require modification because it relies on managed ConfigurationManager - you can either P/Invoke DMProcessConfigXML or use an available wrapper (if your device is a Phone Edition device) or OpenNETCF Registry wrapper - works for all PPC2003 devices.
  • You'll need to modify how the Autorun determines the path of the SD card on which the files are contained. One solution is to check for potential storage cards with this code:-

http://www.opennetcf.org/forums/topic.asp?TOPIC_ID=432

  • Place some token file on your SD card and check for it's existence on each returned path, then when you have your SD card folder you can programmatically install the cab file(s). Again I shouldn't need to give you any hints as to where to find a Process class for .NETCF v1.0
#    Comments [0] |
# Monday, October 17, 2005

Use IMessageFilter From a VB .NETCF Project

I posted this to the newsgroup earlier, but figured it was a useful thing to post for future reference. If you want to implement a custom IMessageFilter using OpenNETCF.Windows.Forms.ApplicationEx you have to be aware that VB.NET autogenerates a main proceedure for you if your project startup object is a form. Therefore it will use the Application.Run method and your filter will never be used. Instead you can implement a Sub Main as your startup object and use ApplicationEx:-

Public Shared Sub Main()

ApplicationEx.Run(New MyFormType())

End Sub

 

Then set your Startup object in project properties to your new Sub Main rather than the name of your form class.

#    Comments [0] |
# Monday, October 10, 2005

Developer Developer Developer Day Session

The agenda for DDD Day II has now been published and for some crazy reason folks voted for my Bluetooth with .NET session :-) I'll be covering both the Bluetooth and Object Exchange components of the 32feet.NET suite, I wont touch on the IrDA part, but the code would be almost exactly the same. We'll walk through discovery, client and server connections and sending/receiving objects, hopefully with some audience participation.

It's a great priviledge to be selected along with such a great selection of excellent speakers so I have a lot to live up to! I now have to attempt to make my demonstration application absolutely bullet proof since it inexplicably failed when I gave a short session at the MVP Summit. But it wasn't my code at fault honestly, it worked fine during lunch afterwards (I had several witnesses), obviously a result of the the sinister EM radiation around the Redmond campus... :-)

 

#    Comments [0] |
# Saturday, October 08, 2005

Use Microsoft Bluetooth Stack on Toshiba M200

I was asked how to replace the default Toshiba stack installed on the M200 with the Windows stack (to allow for .NET programmability). Luckily it's easy to do and Toshiba include the necessary bits on the hard disk.

First you need to uninstall the Toshiba stack - Go to Add/Remove programs and select "Bluetooth Stack for Windows by Toshiba"

Next run the C:\TOSHIBA\MS_Bluetooth\BtMon2Inst.exe installer to install the BT monitor.

Finally reboot the machine, the system will detect the radio and install the necessary drivers.

#    Comments [0] |
# Wednesday, September 21, 2005

New Personal Area Networking Libraries

The Bluetooth.NET library has now reached it's v1.5 milestone and is now part of the 32feet.NET suite. It joins an updated version of my IrDA library for the desktop which now adds some features (borrowed from the Bluetooth developments) so provides a superset of IrDA functionality on either full or compact frameworks. On top of both these libraries sits Object Exchange, this new library makes it easy to programmatically send and receive files and objects over the Object Exchange (OBEX) protocol. This is designed to provide a similar experience to functionality available for .NET for conducting HTTP requests - ObexWebRequest and ObexListener.

The concept of 32feet.NET is to look at personal area networking for the .NET developer whether your platform of choice is .NETCF on Windows CE or full framework on XP, Tablet PC, XP Embedded or Vista (32 Feet is the range of a standard Bluetooth device, that's 10 metres if you prefer metric). The website has been setup with discussion forums for the current libraries and associated technologies, you'll also find all the class library documentation, and of course the download itself which contains assemblies, source, help documentation and samples.

#    Comments [3] |
# Thursday, September 15, 2005

SDF v1.4 Dlls

A request came up on the newsgroups for just the dlls for the SDF. This could be useful if you are using the VS2005 Beta. Of course if you don't know why you need these or what to do with them, then you can safely ignore this message and grab the package from http://www.opennetcf.org/download.asp?product=SmartDeviceFramework14

OpenNETCF.1.4.zip (479.38 KB)
#    Comments [2] |
# Sunday, September 11, 2005

New MSN APIs to debut Tuesday

[Via MP2KMag.com]

At PDC on Tuesday (13th) Microsoft will unveil a new collection of APIs for it's MSN services to be available from http://msdn.microsoft.com/msn, these will include:-

  • MSN Search Web Services
  • MSN Messenger Activity API (already available here)
  • MSN Virtual Earth API

The last item is interesting. Firstly it sounds like this will be a "proper" documented API, rather than the jscript hacks currently available. Secondly it is being offered free for both commercial and non-commercial use. It is interesting therefore to see how it stacks up against it's big brother Mappoint Web Service for simple commercial applications.

Speaking of which, the new version of Mappoint Web Service (4.0) will also be released at PDC. New features include support for polygons, some new map styles, and further extensions to the mapping coverage.

[Update] MWS 4.0 SDK is available:-

http://www.microsoft.com/downloads/details.aspx?FamilyID=cb5148a9-f09e-4ec8-992f-16478c0b5d9a&DisplayLang=en

#    Comments [0] |
# Friday, September 09, 2005

Developer Day reaches phase 2

The session submissions are all in and it's now your chance to vote for those you want to attend. So pick your top 20 here:-

http://www.developerday.co.uk/ddd/votesessions.asp

Also Sarah has setup a Wiki page to organise a Geek Dinner in Reading after the event, if you are interested in attending check out Sarah's blog post, and sign up on the Wiki.

#    Comments [0] |
# Tuesday, September 06, 2005

Useful new MessageWindow feature

Earlier in the Beta for Visual Studio 2005 I submitted a product suggestion to support a very common scenario with the MessageWindow control, and I was delighted to find that in the July CTP it has been implemented.

The MessageWindow class is provided as a mechanism to receive incoming windows messages and has become a key part of the .NETCF developers interoperability toolbox. .NETCF v2.0 extends the options we have available with new functionality such as support for passing callback functions into native code and COM interop. However there are still times when we will need the humble MessageWindow. One of the first tasks with using the MessageWindow is how to tell the sender where to send the messages. In some cases this involves passing the handle (HWND) of the MessageWindow in via a P/Invoke call, the other common way to identify a MessageWindow is by setting the text and using FindWindow.

This neatly brings me back to the new feature in question. In v1.0 you had to override the WndProc and add your own handler for WM_GETTEXT (and optionally WM_SETTEXT) in order for your MessageWindow to have a caption. .NETCF v2.0 adds the Text property making life that little bit easier. Just set the Text property to something uniquely identifiable for your application, then you can use FindWindow from your native code to get the handle (HWND) of the MessageWindow and start sending messages to it.

#    Comments [0] |
# Monday, September 05, 2005

One-handed Pocket PC Applications

Mark has posted the final version of his MSDN article on designing for stylus-free usage on Windows Mobile. This covers both what you get for free in .NETCF v2.0 for navigating around forms with the d-pad and also what you can do to make some of the other intrinsic controls behave. Mark's sample code includes wrappers around these "badly behaved" controls such as the DateTimePicker.

#    Comments [0] |
# Thursday, September 01, 2005

Service Packs and Fixes

In order to determine all the known issues with .NETCF v1.0 and which Service Pack contained the fix, you would need to look through the fix list for each of the Service Packs in turn. For ease of reference I copied the three fix lists from SP1,2 and 3 and categorised them into the following table. The "o"s indicated in which service pack the issued was resolved. Below it is a table showing which version is preinstalled on the various Windows Mobile devices which have had .NETCF in ROM.

  RTM SP1 SP2 SP3
Defects        
         
Improved code cache performance and memory utilization on ARM processors   o o o
Parsing of Numeric values is not working correctly on some locales (specially affects VB scenarios)   o o o
App would not launch properly if it were already running and showing MessageBox when the user navigated out to Home   o o o
Improved resource loading performance     o o
Minor GUI performance improvements     o o
Added support for new Smartphone languages: Finnish, Czech, Romanian, Slovakian, Norwegian, Hungarian, Polish, Turkish, Russian     o o
Transitions between managed and native code can cause memory leaks on ARM platforms       o
Stack corruption can occur on ARM platforms when local variables are created but never used       o
Invoking a multicast delegate from a catch handler throws a MissingMethodException on ARM platforms       o
Command line arguments containing double byte characters are truncated to a single byte.       o
Memory corruption can occur on devices that have the native security model enabled and both .NET CF V1 SP3 and a pre-release version of .NET CF V2 installed.       o
Deadlocks can occur when running under severe resource constraints.       o
Data Misalignment occurs on Decimal fields in MIPSIV devices.       o
         
Microsoft.WindowsCE.Forms        
InputPanel: EnabledChanged Event fires inspite of setting the enabled property to the same value.     o o
InputPanel: Setting the InputPanel.Enabled property when the form is closing throws an exception     o o
         
System
Double: conversion of 0.0F to a string and results in a memory leak     o o
String: Native exception while calling String.Intern()   o o o
Type: System.Type.GetType(string) fails to load types that reside on external assemblies if those assemblies are not already loaded   o o o
       
System.Data
DataRowCollection.Find Method Returning Incorrect Row   o o o
DataRowCollection.Find() method throws wrong exception     o o
DataSet: Improved performance of many data tasks, including populating DataSets, searching DataTables, DataSet.ReadXml() method when a schema is used, finding and indexing operations, setting DataSet.EnableConstraints property ">DataSet: Improved performance of many data tasks, including populating DataSets, searching DataTables, DataSet.ReadXml() method when a schema is used, finding and indexing operations, setting DataSet.EnableConstraints property      o o
DataSet: Data is missing or loaded incorrectly by DataSet.ReadXml() in some cases.       o
Fixed crash when SQLClient or SQLServerCe is installed     o o
       
System.IO
BinaryReader: BinaryReader.ReadBytes() returns less bytes than asked   o o o
       
System.Net
Improved network media sense / connection management experience   o o o
HttpClient: Authentication state handling errors in http client   o o o
HttpClient: Http client not using credentials from supplied proxy object   o o o
HttpWebRequest: Fixed erroneous parsing of HttpWebRequest response stream     o o
Socket: Force tear down of sockets after dialup disconnect   o o o
Socket: An uncatchable ObjectDisposedException is thrown when the server closes the socket connection.       o
       
System.Net.IrDA
IrDAClient.DiscoverDevices device names garbled     o o
       
System.Web.Services
Web services: Compatibility issues   o o o
Web services: Problem receiving empty arrays mixed with other data   o o o
Web services: InvalidOperationException when polymorphic type is returned and in the same namespace as the service   o o o
Web services: Not correctly handling the default values that VB creates for enums when using the DefaultValue attribute   o o o
Web services: After repeatedly canceling asynchronous web request, all web service calls fail     o o
Web services: An XmlException is thrown when deserializing a qualified name that has no prefix and there is no default namespace defined     o o
Web services: Incorrect handling of null headers in SOAP messa     o o
Web services: A NullReferenceException is thrown when a Web Method returns an empty array using the xsi:Nil attribute       o
Web services: Modifying the SoapClientMessage.ContentType property does not modify the Http requests ContentType header.       o
Web services: An ObjectDisposedException is thrown when a asynchronous web request is aborted before the response is received.       o
Web services: Any array containing one or more elements is not sent to the Web Service correctly.       o
Web services: An application may hang when invoking a Web Method that uses multiple XmlElementAttributes on a single argument, member or property.       o
WebRequest.Proxy doesn't allow spaces in the URL   o o o
       
System.Windows.Forms
Memory leak in the NumericUpDown, DomainUpDown, ComboBox and TextBox controls     o o
The Focus method does not work correctly for the NumericUpDown and DomainUpDown controls     o o
Auto scroll - scrollbars aren't removed until control is inside bounds of scrollbars   o o o
Auto scroll - with control sitting bottom left, should get both scrollbars when control moved over right edge   o o o
ContextMenu: Support raising context menus from assigned hardware key, Pocket PC     o o
ContextMenu: Fixed TreeView issues on Pocket PC 2003     o o
ContextMenu: Fixed side effects on controls like Scrollbar and Label     o o
ContextMenu: erroneous functionality when bound to ListBox     o o
ContextMenu: Showing a context menu on Pocket PC for a textbox unselects the selected text in the textbox     o o
ContextMenu: Empty ContextMenu on Pocket PC should not pop up     o o
Control: Added support for ForeColor &/or BackColor for Button, Checkbox, ComboBox, DomainUpDown, Label, Listbox, ListView, NumericUpDown, RadioButton, Trackbar, TreeView     o o
Control: If a focused control property is changed while the application is in the background it loses its focus   o o o
Control: Don't get GotFocus Event for first control in form   o o o
Control: Focus should move to the next control when the current control with the focus gets disabled   o o o
Control: Extend keyboard events to be enabled on all controls (Control.KeyUp, KeyDown, KeyPress)     o o
Control: Improved Control.Enabled and Control.Parent property changing performance     o o
Control: Native Exception occurs when using the get accessor for Control.Capture     o o
Control: Invoke on a disposed control hangs the application.       o
Form: ControlCollection Memory leak   o o o
Form: Improved performance of Controls property   o o o
Form: Tab support for Pocket PC based on Z-Order     o o
Form: does not get the focus when all controls are removed from the form     o o
Form: Navigation bar flickers when new form is being loaded     o o
Form: ObjectDisposedException occurs when DataBinding a control to a form shown via Show()     o o
Form: OK button eventually goes away when re-using recycled form for ShowDialog(     o o
Form: Scrollbars should go away when app 100% client sized control is returned back to 100% inside client area   o o o
ImageList: Unexpected exception while adding an image to an imagelist on an Hx4700 and hx4705       o
ListView control allows setting the text alignment of its first column to HorizontalAlignment.Center and HorizontalAlignment.Right   o o o
ListView: The Text property of a ListView column is reset to “” when removing the column from the ListView and then adding it back.     o o
ListViewItem.Checked property always returns false if the CheckBoxes property of the listview control is set to false   o o o
MainMenu: Support menu hotkeys on Pocket PC     o o
MainMenu: InputPanel Button disappears from MainMenu on Pocket PC 2002     o o
MainMenu: SIP button does not go away when the toolbar control is removed from a form that does not have a menu     o o
ProgressBar: Setting the Minimum and Maximum properties of a progressbar no longer crashes the application.       o
RadioButton: Native exception thrown while setting the Checked property to false   o o o
ScrollableControl: thumb in wrong position after setting AutoScrollPosition   o o o
ScrollableControl: throws not supported exception setting AutoScroll=false   o o o
TextBox: Application terminates with a first-chance exception in gwes.exe when typing quickly in a textbox   o o o
ToolBar: Tool Bar's on Windows Mobile 2003 SE no longer lose their images when removed from the form.       o
         
System.Xml
XmlQualifiedName objects are corrupted if the namespace of the data is the same as that of the service   o o o
XmlTextReader performance improvements     o o
         
         
Devices
Pocket PC 2003 o r r r
Smartphone 2003   o    
Pocket PC 2003 Second Edition     o r
Smartphone 2003 Second Edition     o  
Windows Mobile v5.0 Pocket PC       o
Windows Mobile v5.0 Smartphone       o
r = Available via RAM install        

#    Comments [0] |
# Friday, August 26, 2005

Making the SDK Documentation more discoverable

I like John Kennedy's proposed SDK TOC for Windows Mobile. And since the sample contains valid links, I was surpised at the amount of content I found which I'd not been able to locate before :-)

While there will always be cases when organising content like this you could end up in heated debates about whether article x belongs in category y or z, I believe it's a definate improvement and gives better visibility of the scope and content of the SDK documentation. I particularly like the fact that Whats New is the first category with itemised details for each update - the SDK documentation has already received two batches of updates.

Update: I've realised there isn't any Telephony content on this contents page. It would be good to have an entry for Telephony (which is an important part of most Windows Mobile devices) and it should link through to TAPI, Phone, SMS and SIM topics.

#    Comments [2] |

All These New Devices

There has been a lot of activity recently on new Windows Mobile 5.0 devices, in a few cases official announcments, in some cases details leaked through common sources such as the FCC site where products sent for testing are publically detailed.

One of the interesting models to be revealed has been discussed by WallabyFan, with the original scoop at the register. The unique feature of this device is that it is the first Windows Mobile Smartphone to feature a built in GPS. The feature has previously been available on a small number of Pocket PC devices, most recently in the iPaq 65xx range.

HTC are busy with Pocket PC devices in the form of the Universal, and the Wizard - successor to the Magician (iMate JAM and equivalents), and also new Smartphone models such as the Tornado - a WiFi equipped Smartphone.

All in all it looks like a lot of exciting new devices will bring Windows Mobile 5.0 to the market place.

#    Comments [0] |