NAVmoble - the pocket-sized ERP
Optimized for Microsoft Dynamics NAV and Windows Mobile powered devices

Wednesday, November 28, 2007

Sofia. NET Group Monthly Meeting (Nov 2007)

We will have our regular monthly meeting on 29.Nov.2007(Thursday) at 18:30 in the local Microsoft office.
Galin Ilivev will talk about IIS7 and will cover the following topics:

1. New tools in IIS7 as well as new administration options
2. New tracing and diagnostics options
3. New integration pipeline
4. Deep example that:

  • use custom IIS module written in C#
  • extend IIS configuration schema
  • extend IIS Manager by adding UI component>
See you there!

When Compact Framework fails to make HttpWebRequest ...

Andrew Arnott has an interesting post about a bug found in CF.NET . It may fail to call some web servers with the following error:
System.Net.WebException: Unable to read data from the transport connection.

Want to know why? See the details here...

(via .NET Compact Framework Team's blog)

Saturday, November 03, 2007

Microsoft Days in the universities

A series of "Microsoft Days" events will be held in the local(Sofia) universities as follows:
5 Nov 2007 : Technical University, Sofia , 10:00h, hall 2140, block 2
see the agenda
6 Nov 2007 : Colledge of Telecommunications and Posts
see the agenda
18 Nov 2007: University if Sofia,The Faculty of Mathematics and Informatics
see the agenda

I will talk about the newest additions in the Microsoft's mobile technology stack. The session is called "Mobile Development with .NET Compact Framework 3.5". Be there if you're starving to see what to expect from Visual Studio 2008 when dealing with mobile applications

Wednesday, October 17, 2007

Sofia .NET User Group Meeting

We will have another meeting in the local Microsoft office on 18.Oct.2007 at 18:30.
This time Valdimir Chalkov will talk about analyzing and solving problems in production environment with the help of the Debugging Tools for Windows.
The topic will be presented by Vladimir Chalkov, C# MVP and CEO of Crossroad

Wednesday, October 03, 2007

Mobile & Embedded Developer Chat,October 24

Neil will host another Mobile & Embedded Developer Skype Chat on 24.Oct.2007 at 3PM GMT.
Click here to add Outlook Reminder(via Neil's post)
You may ask the experts your mobile&embedded dev questions.

The chat may be accessed from the following url:
http://chat.opennetcf.com
Note that you may say hi at any time in the chat room.

The original announcement may be found here on the Neil's blog

I just noticed that Neil got his MVP status back. Contragts Neil! You deserved it!

Tuesday, October 02, 2007

DevReach Summary

I just came from DevReach and decided to pour my fresh impressions over my blog.
I liked this year issue more than the previous. I guess the feedback from the previous one was analyzed and used. We had session levels this time, and many folks used it to choose the right topic for them.
I attended to several sessions from level 100 to level 300 (there were not many level 400 and I was not able to attend one). There were many presenters, who participated the last year like Stephen Forte, Carl Franklin,Richard Campbell and some local guys like Branimir, Martin ,Vlado Chalkov , Hristo ,etc. It's good to see known faces.
There were many non-bulgarian attendees and this gave the conference a cosmopolitan soul.
I enjoyed again the simple and informative style of Carl and laughed on the emotional and funny sprint of Steve.
What I was missing again is a mobile dev track. Hey, mobile solutions are not another universe - they are natural extensions of every mission critical business solution!

Anyway, you guys did a great job this year. I already expect the next one.

Here comes some low-quality :-D pictures from my phone's camera:

Sunday, September 23, 2007

Random CF.NET links

I was too busy lately in order to blog and read blogs(never do this at home). I had to "read" hundreds of posts, which popped out of my agreggator. I decided to post a bunch of links that came to my attention.

There were other interesting ones ... stay tuned for more.

Friday, August 24, 2007

.NET Compact Framework chat on Skype

Neil will host a CF.NET chat on Skype the next Wednesday, Aug 29 2007 from 6:00 pm to 7:00pm (London)
CF.NET team members, MVPs and epxerts will hang out there. if you have device development questions this is the place to find the answers.

You may enter the chat at http://chat.opennetcf.com

Click here to update your Outlook calendar

The Bulgarian timeframe of the chat is from 20:00h to 21:00h

Check out the Neil's announcemnet for few more details.

Thursday, August 16, 2007

How to upgrade HTC P3600(a.k.a. Trinity) to Windows Mobile 6 and unlocking the GPS


FOLLOW THE STEPS BELLOW ON YOUR OWN RISK.!
IT IS IMPORTANT TO NOTE THAT THIS PROCEDURE MAY TURN YOUR DEVICE TO A USELESS BRICK!

NO WARRANTIES AT ALL!

I use HTC P3600 as a phone/PDA which is armed with Windows Mobile 5.0. The device has a camera, 3G,WiFi,Bluetooth and more. It does not have a GPS(officially).
I noticed recently that the guys from xda-developers.com have published Windows Mobile 6 image for Trinity. It is important to note that HTC does not provide official upgrade for P3600.

So, I read some posts on the xda forums and finally managed to upgrade my device. I have now WM 6 on my P3600 and the most interesting part is that I have a GPS support.

I followed these steps:

1. Downloaded the WM6 image and ROMUpgrade utility on the PC:
http://ax3l.volospin.com/AX3L_OS%20v2.0.8.2.rar

Check out other available WM images here:
http://wiki.xda-developers.com/index.php?pagename=Trinity_Upgrades

2. Downloaded the following tool(SSPL-TRIN.exe) on the PC.
It allows to bypass the CID and signature check.
Download link:
http://forum.xda-developers.com/attachment.php?attachmentid=34180&d=1171153073
The following post gives more details:
http://forum.xda-developers.com/showthread.php?t=293632

3. Connected the device to PC
4. Copied SSPL-TRIN.exe on the device
5. Launched SSPL-TRIN.exe from the device.
The screen turned-off anf a strange colorful screen appeared(bootloader mode)

6. Launched the ROMUpdateUtility.exe from the PC
I performed the upgrade on Vista so I needed to download the ROMUpdateUtility for Vista:
http://203.162.89.207/Ruu_3.13.3.2.zip
I just needed to replace the extracted files from Step 1

7. Followed the steps provided by the ROMUpdateUtility

And ops! I have the WM6 on my device! The big surprise is that the device has now a GPS support!

IMPORTANT NOTES:


  • it is a risky operation and you may render your device unusable. Do it on your own risk
  • do not launch any application on your PC during the upgrade process
  • do not disconnect/turnoff the device
  • do not restart/turn off PC
  • make sure you have device battery charged over 50%
  • disable PC hibernate/sleep features - or just move the mouse to prevent it
  • carefully read the redme.doc before starting the upgrade process

More info may be found on the following places:
http://forum.xda-developers.com/forumdisplay.php?f=359
http://wiki.xda-developers.com/index.php?pagename=HTC_Trinity


Links:
Windows Mobile 6 Image for Trinity
SSPL-Trin - tool to bypass the CID/signature checking
ROMUpdateUtility for Vista
Trinity Wikki
Trinity and Windows Mobile 6 Forums

Monday, August 06, 2007

"How To" Series: Configuring Network Adapters with Compact Framework


There was a question in the forums, if there is a way to configure a network adapter automatically - without an user interaction. Using the UI, the user may select "My network card connects to" value for every adapter in the adapters list. It may be changed to point one of the available network destinations like "The Internet" , "Work", etc. So, is there a way to this automatically?

In short the answer is YES! There is a way. We may prepare an OMA Client Provisioning File and pass it to the appropriate configuration provider in Windows Mobile.
An appropriate configuration file would be like this:


<wap-provisioningdoc>
<characteristic type="CM_NetEntries">
<characteristic type="Adapter Name">
<parm name="DestId" value="{A1182988-0D73-439e-87AD-2A5B369F808B}"/>
<parm name="Adapter" value="Qualified Name"/>
</characteristic>
</characteristic>
</wap-provisioningdoc>




This file will bind a network adapter named "Adapter Name"
to the "Work" destination. We have to change the "Adapter Name" value with
the name of the adapter as it is seen in the adapters list. The "Qualified Name" should be changed with the fully qualified name of the adapter - it may be obtained by using the GetAdaptersAddresses routine

If we want to change the destination to "The Internet" , we have to supply different GUID for the DestId parameter. Following network identifiers as configured by default on Windows Mobile:

The Internet: {436EF144-B4FB-4863-A041-8F905A62C572}
Work: {A1182988-0D73-439e-87AD-2A5B369F808B}
WAP Network: {7022E968-5A97-4051-BC1C-C578E2FBA5D9}
Secure WAP Network:{F28D1F74-72BE-4394-A4A7-4E296219390C}
CurrentDTPTNetwork:{A1182988-0D73-439e-87AD-2A5B369F808B}

What we have to do in order to apply this configuration setting?
We have the following options:
1. Preparing the provisioning Xml file , save it as _setup.xml, and place it inside a CAB file. We may "execute" the file on the device, then. Check out this post for details about deploying provisioning files with CABs.
2. We may apply these settings through code(Compact Framework) by using the managed Microsoft.WindowsMobile.Configuration.ConfigurationManager class from Windows Mobile 5 SDK:

string configurationXml = "<wap-provisioningdoc><characteristic type=\"CM_NetEntries\">"+
"<characteristic type=\"Adapter Name\"><parm name=\"DestId\" "+
"value=\"{A1182988-0D73-439e-87AD-2A5B369F808B}\"/><parm name=\"Adapter\" value=\"Qualified Name\" /> "+
"</characteristic></characteristic></wap-provisioningdoc>";
// Load XML
XmlDocument configurationXmlDoc = new XmlDocument();
configurationXmlDoc.LoadXml(configurationXml);
// Send to Configuration Manager
ConfigurationManager.ProcessConfiguration(configurationXmlDoc, false);


Also the unmanaged version DMProcessConfigXML may be used
Check out this post for unmanaged wrapper of DMProcessConfigXML

Links
CM_NetEntries Configuration Service Provider Examples for OMA Client Provisioning
Injecting Provisioning XML into a cab using VS 2005 on the Windows Mobile Blog
DMProcessConfigXML on the Marcus Perryman's WebLog
Windows Mobile Device Management for more configuration options

Sunday, July 29, 2007

Visual Studio 2008: Device Security Manager

In my post “How to” Series: Windows Mobile Security Configurations, I said that if you want to deal with the device security configurations you may download the Security Configuration Manager Powertoy for Windows Mobile.(there are some other options as well)
If you have the Visual Studio 2008 Beta 2 installed, you do not need this powertoy anymore. It is part of VS 2008,now.


Just cradle the device( or emulator) , launch the Device Security Manager and start locking,unlocking and installing device certificates :).

I just noticed Mark Arteaga has collected some resources related to Windows Mobile Security. Check them out.


Links:
“How to” Series: Windows Mobile Security Configurations
Windows Mobile Security resources from Mark Arteaga

Tuesday, July 24, 2007

"How To" Series: Reading Device Owner Information on Windows Mobile



I noticed recently, that some guys asked(in the forums) how to read the device owner information from .NET Compact Framework.

The Device Owner information may be obtained from the device's registry. It is stored under the following registry key: HKEY_CURRENT_USER\ControlPanel\Owner






Note that, this key may be missing on a fresh device. The key is populated after the owner sets his/her information.

The registry key HKEY_CURRENT_USER\ControlPanel\Owner has two interesting values:
"Owner" and "Owner Notes". These values holds binary data.
The "Owner" value contains the following owner information attributes: Name, Company, Phone, E-mail, Address. The "Owner Notes" value contains the Notes of the owner :)
Reading Owner notes is simple like:
RegistryKey key = Registry.CurrentUser.OpenSubKey("ControlPanel\\Owner");
byte[] data = key.GetValue("Owner Notes") as byte[];
string notes = UnicodeEncoding.Unicode.GetString(data, 0, data.Length).TrimEnd('\0');

The tricky part is to "decode" the "Owner" binary data, which contains multiple fixed-length values. In order to deal with it , we have to know the exact length of every device owner attribute:

  • Name: 72 bytes
  • Company: 72 bytes
  • Address: 372 bytes
  • Phone: 48 bytes
  • Email: 74 bytes

So, reading the "Owner" info is easy as:
RegistryKey key = Registry.CurrentUser.OpenSubKey("ControlPanel\\Owner");
byte[] data = key.GetValue("Owner") as byte[];
string name = UnicodeEncoding.Unicode.GetString(data,0,72).TrimEnd('\0');
string company = UnicodeEncoding.Unicode.GetString(data,72,72).TrimEnd('\0');
string address = UnicodeEncoding.Unicode.GetString(data, 144, 372).TrimEnd('\0');
string phone = UnicodeEncoding.Unicode.GetString(data, 516, 48).TrimEnd('\0');
string email = UnicodeEncoding.Unicode.GetString(data, 566, 74).TrimEnd('\0');

You may obtain the full source code from here

Monday, July 16, 2007

Internet Explorer Mobile:One-Column Layout

Fig 1. One Column Layout

I had a complaint from a customer of mine, that the Internet Explorer Mobile(Windows Mobile 5.0) does not render their HTML reports in a tabular form.
At first, I was wondering if they found a defect in our custom HTML exporting feature.Then I realize what happened.

We're using a sequence of TABLE,TR and TD tags to have our HTML content rendered into a tabular form. Some of the users accidentally had switched on the One Column feature of the Mobile Internet Explorer. This layout forces the Mobile Internet Explorer to render all content in a single column without horizontal scrolling.






Fig.2: Default layout

Links
IE Mobile Team Weblog
Wikipedia for IE Mobile

Friday, July 13, 2007

Windows Mobile Device Management

Developing and deploying a software solution is almost never a single act.
After the solution is deployed, it has to be monitored and continuously updated to meet the ever-changing business environment. So, what we developers do is to utilize existing or implementing a custom strategy for automatic software updating.
However, sometimes the business needs to update not only a particular application, but also changing the application environment (underlying OS for example).
The remote computer management is a common practice(there are a lot of tools) these days. However, the remote management of mobile devices(like PDA-s and smart phones ) is not so common. For example on the Windows platform, we have a Remote Desktop and Terminal Services out of the box. And this is not the case for the Windows Mobile devices (there are third party solutions).
Fortunately, there is a solution for this kind of problems, when dealing with Windows Mobile based devices. The out-of-the-box solution is called Windows Mobile Device Management. Windows Mobile provides infrastructure for remote management based on an industry standards published by Open Mobile Aliance(OMA) . Windows Mobile devices support additional extras as well - not mentioned in the OMA specifications.

The term used in the literature is actually provisioning.

Windows Mobile supports 2 OMA standards for provisioning:

The first one is based on a client-server conversation by using a communication session between the device(client) and a special DM(device management) server. During this conversation the server may query device in order to get data from it and may send provisioning instructions to change particular settings over the device. The communication is based on TCP/IP ,so any TCP/IP capable infrastructure may be used(GPRS,WiFi,...). This post will not talk about this kind of provisioning...

The second one called OMA Client Provisioning is based on deploying(sending) a special xml file on the device ,which contains provisioning instructions. There are various instructions supported by Windows Mobile, which allows for:
- Managing connectivity (GPRS,VPN,WiFi,...) settings of the device
- Managing e-mail accounts in he Pocket Outlook
- Managing Pocket IE favorites
- Managing device registry(adding,modifying and deleting registry keys)
- Managing security settings
... and even more...

The instructions are grouped by functional areas and referred as Configuration Providers. The Configuration Provider actually is the software component, which processes particular type of instructions.
Check out the available configuration providers.

The provisioning files may be delivered to the device throughout the following channels:
  • ROM image
    provisioning files may be deployed in the device's ROM and applied on cold boot.

  • RAPI and ActiveSync
    the rapiconfig.exe is placed in the tools directory of the SDK


  • Deployment as .CAB or .CPF file
    Provisioning files may be packaged in a CAB files and deployed on the device like any other CAB file( ActiveSync,LAN, SD/MMC card, etc)


  • OTA (Over-the-air) Provisioning
    this includes various techniques like DM Server, WAP Push, SMS, E-mail, HTTP(web site download)


  • Custom file delivery and the Windows Mobile Configuration Manager API
    The developers may use the managed WindowsMobile.Configuration.ConfigurationProvider (Part from the Windows Mobile 5 SDK) to "execute" provisioning files. Your application may receive provisioning files through various comm channels( SMS, E-mails, Web Services ,... what ever) and pass them to the configuration provider for execution.
Links
Open Mobile Aliance
OMA DM Provisioning for Windows Mobile
OMA Client Provisioning for Windows Mobile
Configuration providers supported by Windows Mobile
Managing Windows Mobile 5.0

Tuesday, July 10, 2007

"How To" Series: Retrieving IMSI and IMEI on Windows Mobile

I had to retrieve the IMSI and IMEI on Windows Mobile for a particular project.
What I needed actually was the IMSI , because it may be used in OMA Client Provisoning through WAP Push scenarios. It may be very practical for the enterprise to manage its devices remotely and I will post more on that topic later on.

In order to retreive IMSI and IMEI, one have to deal with the Telephony API and PInvoke. In general the magic is done by invoking the native lineGetGeneralInfo routine from TAPI.
You may download the full source code from here

the original code article may be found here

There is another approach as well - buy the Telephony library from OpenNETCF

Links
What is IMSI
What is IMEI
OMA Client Provisoning for Windows Mobile
The sample source code

Wednesday, July 04, 2007

Sofia .NET User Group Meeting Summary(July'07)

The regular monthly meeting of Sofia .NET User Group just finished. We had a great presenter - Dino Esposito, who scratched some of the topics around the Workflows and Multi-tier Applications.
We gladly consumed the snacks, kindly provided by the sponsors (Crossroad, Microsoft)

You may be part of the Sofia .NET User Group activities by registering here

Following some photos as usual:

Sunday, July 01, 2007

Dino Esposito at the Sofia .NET User Group

It's time to have our regular monthly meeting again!
This time Dino Esposito will talk about "Design, Host and Deploy Workflows in Multi-tier Applications".
The event will happen in Hotel Vega,Sofia ,04.July at 18:30. The places may be limited - so hurry up and register on the Sofia NET User Group web site
This gotta be a wicked session ,so be there!

The event is organized with the help of Martin Kulov, Crossroad and the local Microsoft office.


Dino Esposito will have a 2 days course named "Wicked ASP.NET Programming Seminar" on 4th and 5th July .He will cover very interesting ASP.NET related topics. You may check out the details on the event's web site


Links
Sofia .NET User Group Registration
Wicked ASP.NET Programming Seminar

UPDATE
The session in front of the Sofia .NET User Group(04.Jully.2007,18:30h) will be broadcasted live.

Thursday, June 28, 2007

Are you a right clicka or an IBook flippa?

My friend Chris just send me this cool video:



via HSDMAG.NET

Tuesday, June 26, 2007

Configuring Symbol MK1100 Micro-Kiosk


I had a project involving the development of a custom CF.NET application. The app was intended to be deployed on a number of Widnows CE 4.1 based devices from Symbol(MK1100). This device is a rather old model, however the customer had already the device on hold. These devices are custom - the vendor(Symbol in this case) decides what is this device like.
The file system in MK1100 uses a volatile memory. The device have no battery. It is plugged directly into the power supply circuit. This means that if someone unplug the device, all the executables, data and even the .NET CF will be lost and they should be deployed again. Fortunately, the device provides tools to automate the initial application deployment on boot. However, I spent a lot of time till getting the right path. I tried to find some best practices, articles or even forums discussions about the best way to deploy my app on device boot. Unfortunately I haven't found a complete guide.
It turns out that the device has a non-volatile memory that may be used to store files to live the cold boot. My first approach was to store and use the CAB, executables and data files from the non-volatile area. And that was a terrible approach, as it turned out later. The software and device behavior as a whole was unpredictable and unstable.
So my final approach was :
1. Placing all setup files(CF.NET including) into the non-volatile area.
It appears as a folder named \Application

2. Placing a file with .CPY extension in the non-volatile area. the file contains instructions for copying all the CAB files from the non-volatile area into the volatile area - e.g.\Program Files\MyApp. The .CPY files are read and executed on boot. The idea was to avoid execution of CABs from the non-volatile area.

3. Placing a .reg file in the non-volatile area.
This registry file contains device configuration information and it is read from the device on boot. The interesting part was to instruct the device that instead of launching the OS Shell, it had to launch the wceload.exe couple of times to install the .NET CF and other apps. At the it launches my custom app in kiosk mode.. Then it launches my app instead of the shell.The outcome was to have the device operating in kiosk mode...and the kiosk mode was easier on this device

On boot, the .CPY file forces the device to copy all the CABS from the non-volatile area into the volatile area. Then the .reg file forces the device to launch wceload to install all the CAB files from the non-volatile area. At the end the install the custom app is launched.

Related comments and advices are welcome!

Links
MK1100 Micro-Kiosk from Symbol
Kiosk mode in windows mobile
Window CE vs Windows Mobile

Wednesday, June 13, 2007

Mobile Development Handbook

Some folks asked me recently about recommending a book about managed mobile development.
I just noticed that Daniel Moth announced his book called "The Mobile Development Handbook". Daniel(former MVP and Microsoft employee) and his co-authors Peter Foot(MVP) and Andy Wigley(MVP) are well known in the community and I believe the book is worth to have.

The book is available on amazon.com

Links
Mobile Development Handbook on amazon.com
Daniel Moth about his book
Peter Foot's blog
Andy Wigle's company web site

Thursday, June 07, 2007

Sofia .NET User Group Meeting Summary

The June monthly meeting is already a history.
George Kremenliev kindly revealed some of the magic behind the new WCF/WF integration available in .NET 3.5. Later on, Martin took us to a near pub,where we continued our high-tech talks.

Following some photos: