I try to stick to technical blog posts, but I thought I'd serve up a double helping of opinion today. You can blame it on the bass player. It’s his fault. We were chatting up new technology during a jam session last weekend and he actually said “…mobility is kind of a small, niche market for Microsoft…”. That got me started… again.
ARE YOU SERIOUS???? When I’m invited to speak on Windows Mobile, I usually open with a few minutes of why I think mobile is THE place to be, so I thought it would make an interesting blog post. Where to start…
Dr. Egon Spengler: I'm worried, Ray. All my readings point to something big on the horizon.
Winston Zeddemore: What do you mean, big?
Dr. Egon Spengler: Well, let's say this Twinkie represents the normal amount of psychokinetic energy in the New York area. Based on this morning's reading, it would be a Twinkie thirty-five feet long, weighing approximately six hundred pounds.
Winston Zeddemore: That's a big Twinkie.
That’s probably an understatement. Mobility is a true game changer. Don’t get me wrong, there are some exciting things going on in the desktop/server world you need to keep your eyes on—Live Mesh, advances in our virtualization, SQL Server 2008, LINQ, Silverlight, etc. All good stuff. Mobile is different though and there are many reasons I think this technology, and the developers behind it will change the world.
The Big Twinkie
Look, you can use statistics to prove anything (real or make believe) but here’s a statistic you can’t argue with: 3 billion mobile devices. Compare that to PCs at under a billion units or TV sets at 1.5 billion. Mobile phones may be small but the market is BIG. There are people who don’t own PCs, don’t drive cars, couldn’t care less about owning a land line, would give up their TV… but don’t take their mobile phone. Remember the MS goal of a PC in every home? Small fries… What about those attempts at building ultra cheap PCs to reach untapped markets? Mobile phones already do it. A computer in every pocket. Maybe not every mobile phone is a full featured computing device, but it’s just a matter of time. When you can buy a Moto Q for $99, how far can we be? Mobile phones will reach into markets where PCs can’t make it. In business terms, it’s a smaller margin but you can’t argue with the numbers. This is also why a standard developer platform like Windows Mobile is so important to make it easy for developers to get in this game.
The Game Changer
It’s not just about the size of the market… it’s about the possibilities that a mobile device brings to the landscape. The potential. Unlike a laptop, a mobile device has the potential to really leverage voice, data, and location into something that fits in your pocket. It’s a triple threat combination we’ve only begun to see used in software or commercial devices. When I start talking mobile potential, people sometimes remind me how cumbersome mobile devices can be at integrating all these things today. Well, sometimes a takes a while for business models, technology, and consumers to find harmony but the writing is on the wall. Think about what you can do with those three things combined with rich user data found on a mobile device. Look how far this mobile market has come in a few short years. I recommend you hold on…Windows Mobile has come a long way, but the truth is that things are just beginning to get interesting.
A vision is a colorful opinion...
Before I go painting a picture and get slammed with questions like “when will it be released”, let me just say I don’t know. The following is blabber about the way I think about our mobile world and is not based on formal Microsoft strategy or anything other than pure speculation. I’m not blogging about anything new here, but it’s my take on things. Take it or leave it. The real strategy behind Windows Mobile is a collective momentum of many different business units inside Microsoft and a market where the timing has to be right. It’s bigger than me…disclaimer complete. I just think certain industry momentum creates some inevitable solutions. Therein, my excitement takes hold…
Location Based Services
Location Based Services have had a slow start, but I think they will eventually change the way people use mobile devices. At MEDC 4 years ago, we showed off how LBS could help you find and connect with a friend at a nearby coffee shop. It was an amazing capability when you consider it in logistics apps and social networking. There were obviously a lot of security concerns and some network infrastructure with operators that had to be in place to really use it in a practical application, but... what great potential. Since then, we’ve seen a lot of good GPS enabled mapping and LOB logistics apps come to our handsets. Anyone who has used Live Search with voice and GPS capabilities has had a taste of how amazing this kind of app can be. Also interesting to me has been the community efforts to try and use cellular triangulation to provide a “poor man’s” location system and push ahead with LBS. The idea was to build a public database of cell tower locations based on tower IDs that could be used provide approximate location on devices without GPS. LBS is coming and it will be a locomotive… it may take it a while to get started, but try to stop it when it reaches speed.
If we’ve learned anything from the social networking sites out there, it’s that there are a LOT of people who are more interested in connecting with peers than trying to secure every aspect of their information (e.g. – location). Privacy aside, I think it’s inevitable that mobile LBS apps will take social networking to a new level eventually. That’s just the fun part. There’s a business side to LBS that is in its infancy. Look at all the money that goes into advertising on the television and even major search engines. At best, those adds reach people who may be interested in the product based on a query or demographic. Imagine the marking potential when you add LBS to the mix? With LBS, you not only connect a need with a service, but a service in the best location. That’s convenience and convenience may be the best selling product of all time. Forget popup adds and manual searching… location changes the game.
…my plane lands and while I taxi into the airport terminal, I switch on my phone. My device instantly realizes I’m in a new city starts preparing information I need… turn by turn directions to my hotel, a list of nearby restaurants based on my meal preferences, maybe a list of local bands within walking distance, and of course… the nearest Starbucks. Maybe this city that is new to me, so I also automatically get some city history, current events, and sites I should see while I’m here. At the hotel, I’m interested in what my friends are doing, so I check to see if anyone else is in here yet so we can hook up for dinner. Because they have chosen to share location data with me, I see friends in the area who get a food invite and we agree on Thai Food. A quick LBS check on Thai restaurants suggests three places within a mile and one offers us a 10% promo code for finding them through the LBS portal. At dinner, I compare slope conditions of every run within 15 miles. When I hit the slopes, I get a notification that a slope map is available for my mobile device with feeds for lift wait times so I can make the most of my day. Today, I probably wouldn’t do this all on my mobile device because it’s a lot of work searching… but LBS could make all this nearly effortless with minimal web search. Businesses could advertise by location through LBS portals. LBS portals and apps are going to change the game. I don’t know when… but I know they will. Maybe you can help make it happen.
Mobile Applications & Information that Matters
Never underestimate the value and opportunity that a mobile application can provide. If you think about mobile apps the way you think about desktop applications, it’s easy to dismiss the opportunity. After all, trying to take the same user experience to a mobile device isn’t going to work. There are many hardware limitations and it won’t ever live up to the desktop version this way. So where’s the game changer here?
Three words… Information that Matters. When I heard about us bringing Office to Windows Mobile, I cringed a bit. I couldn’t imagine Word, Excel, or PowerPoint under the constraints of a mobile device. How would people use this? It wasn’t long before I discovered how convenient it was to be able to view Office email attachments. Even better – I could walk-through my PowerPoint presentations anywhere I was (great where you’re tweaking your message a few minutes before a meeting). I didn’t want to compose Office docs on my device, but being able to view them just boosted my productivity in a big way. I rarely compose email from my device, but the ability to instantly receive and read email wherever I am is huge to me. It allows me to filter and process the information that matters to me. That’s the power of a good mobile app…it doesn’t have to do everything a desktop app does, but if it can deliver information that matters, wherever I am, then it becomes indispensible. Convenience.
With Systems Center Mobile Device Manager (SCMDM) and many other great 3rd party VPN solutions, secure corporate network access is a reality today. Not only that-- anything you can publish through a website, email, or SMS can get to your mobile users anywhere they are. It’s amazing how much of that information can be filtered down and made accessible through a mobile device. Take any major desktop or server app, filter out the information that a user cannot live without, and you have the start of a very powerful mobile application. It’s not about getting all the features in there…it’s about exposing the ones that matter. Mobile device have just begun the extend the desktop computing space. This app market is not a competitor for the desktop… it extends it and few ISVs have tackled these markets yet. My message to developers—just listen… that’s opportunity calling your name.
Mobile Digital Media
Digital media is another area where mobile will certainly shake things up—streaming and local video. Limited device hardware and slow cell networks have kept this at bay for awhile, but it’s changing rapidly. I admit, I’m one of the biggest skeptics about the adoption of mobile TV—especially in a world of giant, high-def home theaters. Will anyone really want to watch media on a little screen? Convenience…accessibility… Even though it’s a step down in terms of home theater quality, mobile media is filled with potential and it’s pretty good today. It’s going to get much better and when you consider the end-game of delivering high quality video to mobile devices, the doors open wide. The other side of this is that mobile video doesn’t need all the polish of broadcast quality TV. Think about supplementing main broadcast events with mobile video highlights, use it with advance training and education, or open that social networking box again. Even with slow network speeds, Slingbox and Orb have been blazing this market for a long time. There are others doing broadcast streaming with good success. Silverlight Mobile will open a whole new set of opportunities here as well. Think of the consumers who may not have their own TV but likely own a phone. Extending markets… We haven’t even scratched the surface of what you could do. Memory is cheap… battery advances will come. I’m excited.
Devices are more than phones and data pipes
We tend to think of mobile phones as just that – phones that do some other things like music, video, and browsing. What about mobile devices extending the consumer and business market in other ways? Have you seen the work people are doing with 2D barcodes? Consider where things will go with technologies like Near Field Communications (NFC), RFID, and better speech integration. I could go on with the list… There is no reason mobile devices cannot turn into amazing little pocket tools that interact with you environment in extend consumer and business models in ways that will change the way we live, communicate, make purchases, and access data. It’s amazing to me to think of the possibilities that are destined to materialize in this market.
What this means for ISVs
The early days of Windows desktop development were exciting. Anyone with a good idea and a compiler could build and sell software. The markets were wide open and the opportunity was so much greater than the software that was readily available. Mobile is like that today. It’s a wild new frontier and opportunity abounds for creative ISVs. I’m actually excited by all the new competition in the Windows Mobile space… it’s a good thing for the industry and it keeps us on our game.
Why Microsoft and Windows Mobile? IMHO… · The best development environment bar-none: Visual Studio. I challenge you to find any development environment comparable to Visual Studio. Build your mobile apps, build your web apps, your DB apps, your server apps… all in the same environment and leveraging the skills you already have with managed or native development languages. If you know anything about Win32 or .NET, then it’s an easy hop to native mobile development or the Compact Framework.
· A rich developer community to lean on. No other platform provides more in terms of a development community and wealth of information to help you get started. The Windows Mobile community has been evolving for over 6 years now with public sites, newsgroups, libraries, tools, samples, how-to’s, Webcasts, support options, etc. Check out MSDN and start branching out. If you want to do something, chances are… someone has posted sample code out there to get you started. Here’s a good place to start.
· Development Architecture Options. Allowing for rich clients, smart clients, web applications, native or managed development, SQLCE w/support for merge replication, sync services, and all that .NET brings with it. Windows Mobile can support just about any type or architecture you need to solve a problem. Our LOB Solution Accelerator gives you’re a couple of samples ready for you to run with.
· Reach more devices, more markets, more users. Windows Mobile gives you a standard platform to target your apps to reach the widest variety of devices in the broadest mobile markets with little to no entry barrier for developers. You can build an app today and sell it off your website tomorrow. If you want to sign your code, Mobile2Market provides a single place to get a signature that is honored on almost every operator network out there. Choose from flip phones, candy-bar phones, hardware keyboards, screen sizes, ruggedized devices, etc. There is a Windows Mobile device that will fit you or your business.
Now I’m just ranting… so I’ll wrap this up (remember, blame the bass player). Mobile is no niche market. It’s changing the way people live and the way businesses operate. It’s a big, crazy ecosystem with many influences so it might be a little hard to follow sometimes—the devices, the timing, the competitors… but I’ll tell you one thing: It’s a game changer and… the game is on.
THAT is why I’m passionate about mobile development. That’s why mobile developers will change the world (IMHO).
Cheers,
Reed
Actually, it's more just me...Reed has been doing a great job of updating the blog. I've just been REALLY swamped. I DO promise, though, that I will have something substantial soon.
In the meantime, I just wanted to say 'hi' and sorry for not doing an update in awhile.
As a Windows Mobile developer, you’ve seen all the references to provisioning XML right? It’s all over the SDK. You probably know that it can somehow be used to configure devices, but you may not have connected with any value to developers. After all, the docs kind of blur the intended use around OMA Device Management, Operator, and IT control. Net, net – it looks and smells like a device management “thing” (I suppose it is) and that’s normally not a particularly interesting topic for most developer minds. I ignored it for a while. Then I kept solving day-to-day problems with configuration XML. Today, it’s a critical tool in my developer bag-of-tricks that I couldn’t live without.
Why, you say? Let’s step back a moment and ponder what configuration XML means to the Windows Mobile platform. In WM6, there are some 50+ Configuration Service Providers (CSP) used to configure and query the state of a device. This is all mostly done through XML and an API called DMProcessConfigXML. It’s a beautifully simple concept… write some XML, pass it to DMProcessConfigXML, and the API figures out the rest. You don’t need to know anything about the special purpose APIs behind the CSPs or how to call them… it’s just all XML to you. With some simple config XML, I can configure network connections, email accounts, registry entries, security policies, speed dial entries, browsers favorites, etc. It’s a really simple way to get things done.
The benefits
I’ve found it particularly useful in the areas of support and configuring a clean device. I’m constantly helping partners debug problems around security and connectivity. Security policies and Connection Manager settings are only partially visible in the UI of a Windows Mobile device. If you really want to know what certificates are installed, what security policies are set, or what an Operator has done with the connection manager plumbing that could be affecting your network routes, it’s a lot easier to simply query the CSPs to get this info. As a dev, hard-resets also come with the job. I constantly abuse my device to create problems in the course of reproducing issues—then hard reset to bring it back to life. I use a handful of config XML files to restore my device to a state I like it in – configuring my email, browser favorites, and even my data networks. The ability to save state in our emulators has helped a lot here, but occasionally I still need to do something with a real device and this saves me a lot of manual config time setting it back up.
The other point I’ll make here is that it’s just good to know how configuration XML works. It’s an intrinsic part of the platform. Crack apart any CAB and you’ll find config XML (_setup.xml) used to install your app. How do products like Exchange and Systems Center Mobile Device Manager control and configure your device? You got it…Configuration XML.
Methods of provisioning
There are a number of ways to do it. The most direct way is to simply use the DMProcessConfigXML api (there are both managed and unmanaged version of this). When you look at the SDK and samples, stick to the ones labeled “OMA Client Provisioning” (not the OMA DM versions). Everything should be wrapped in a <wap-provisioningdoc>… </wap-provisioningdoc> before you pass it to DMProcessConfigXML.
You will find a number of community and MSDN resources on the topic. Here are a few places to start on Channel9 and MSDN.
For me, I wrote my own little utility that processes any XML files in the same directory and passes them to DMProcessConfigXML. That way, I can just drop it into a directory and add any provisioning XML I want and… off it goes. I can also stick it in the \2577 directory of an SD card, rename it to AutoRun.EXE and have it automatically configure my device upon inserting an SD card (very handy).
You can use a desktop tool like RapiConfig.exe to push provisioning XML from the desktop (subject to RAPI security policies on your device).
You can build an installable CAB or CPF file from the provisioning XML and then install it on the device.
There are some other methods reserved for operators to do things via SMS & WAP gateway but not really applicable to most developers.
Examples Please…
Start with the SDK samples here: http://msdn2.microsoft.com/en-us/library/bb737572.aspx
Connection Manager: Suppose you wanted to see what Connection Manager was doing with your network requests, this might be a good way to verify mappings, networks, plans, etc.
<wap-provisioningdoc>
<characteristic-query type="CM_Mappings" recursive="true"/>
<characteristic-query type="CM_Planner" recursive="true"/>
<characteristic-query type="CM_Networks" recursive="true"/>
<characteristic-query type="CM_ProxyEntries" recursive="true"/>
<characteristic-query type="Wi-Fi" recursive="true"/>
<characteristic-query type="CM_PPPEntries" recursive="true"/>
<characteristic-query type="CM_VPNEntries" recursive="true"/>
<characteristic-query type="CM_NetEntries" recursive="true"/>
<characteristic-query type="CM_GPRSEntries" recursive="true"/>
</wap-provisioningdoc>
Security Policy: Check out SecurityOff.xml, TwoTierPrompt.xml, OneTierPrompt.xml, TwoTierLocket.xml and OneTierLocker.xml in the SDK tools directories.
Certificates: Open the SdkCerts.CAB (or Certs.CAB) in the SDK with WinZip and examine _setup.xml or the certs.xml in the same directory as a provisioning sample for code signing certs.
If you just want to query all the certs, you could do something like this:
<wap-provisioningdoc>
<characteristic type="CertificateStore">
<characteristic-query type="Privileged Execution Trust Authorities" />
<characteristic-query type="Unprivileged Execution Trust Authorities" />
<characteristic-query type="SPC" />
<characteristic-query type="MY" />
<characteristic-query type="ROOT" />
</characteristic>
</wap-provisioningdoc>
The limits
CSP can be subject to security checks just like any other privileged API, so don’t assume you can configure or query anything on the device. You may need privileged access to use some CSPs (e.g. -Exchange and SCMDM go through privileged processes for comprehensive control). Sometimes there may also be better ways to do things that don’t enforce the same security checks. For example, the QueryPolicy API allows you to interrogate a security policy from code without any special access. On an emulator or 1-tier device though, you should be able to do most anything documented in the public CSP list. You can also use the SDK certs to sign your CAB, CFP, or utility for testing purposes on the emulator or a real device that contains the SDK test certificates.
The Picture
Okay, this is totally unrelated to the post at all... but every post needs some kind of visual to keep it interesting. I took a road trip last week and visited two amazing pieces of history...can you guess what they are?
Cheers,
Reed
These are coming up soon...go ahead and register for them!
Webcasts listed here.
Series Title: Windows Mobile for Business Webcast Series
Abstract: Learn how Microsoft® Windows Mobile® smartphones/PDAs and Microsoft System Center Mobile Device Manager can help improve mobile workforce productivity, enhance mobile device security, simplify management and lower costs. The Windows Mobile platform builds on your existing IT infrastructure and utilizes familiar management tools to provide a highly scalable solution with a low total cost of ownership.
Join our technical experts as they provide comprehensive insight into how to centrally and efficiently deploy and manage mobile devices and applications like you do PCs and how to effectively safeguard corporate data. This webcast series will cover why Windows Mobile for your business and IT, delivering advanced messaging and collaboration, taking business applications and processes mobile, and securing and managing mobile devices.
One of the things I really love about development work at Microsoft is the huge amount of reference material available for developers. Between community web sites, SDK sample, and MSDN-- it's rare when you cannot find a code example to jump start that idea spinning in your brain. MSDN doesn't grill you about becoming a member or jumping through hoops to get information -- it's just there. Come and get me...
Not all samples are created equal. Don't you hate when you are trying to learn something new and the sample provided is the most basic, no-developer-would-ever-actually-do-that-in-a-million-years, kind of code spew? Spare me... give me something I can learn from. When we released the Windows Mobile LOB Solution Accelerator a few years ago, I was excited. Not only was this a real working sample of a complete LOB Windows App -- it was well thought out and written... A great learning tool full of example code.
I'm pleased to say, they did it again.
The Microsoft® Windows Mobile Line of Business Solution Accelerator 2008
Delivering new innovations and development best practices to the Windows Mobile platform with Visual Studio 2008, the .NET Compact Framework 3.5, SQL Server Compact 3.5, a working Supply Chain application, over 5,000 lines of commented code plus over a hundred pages of helpful documentation.
Adapt your App :: Create a single binary that runs unchanged on Windows Mobile Standard or Pro, Portrait or Landscape, Rectangle or Square. No more wasting time building separate executables to accommodate different screen sizes or input methods.
Sync Services for ADO.NET :: Synchronize your data between SQL Server 2008 and SQL Server Compact 3.5 using the new Sync Framework. Keep all your occasionally-connected mobile workers on the same page.
Windows Communication Foundation (WCF) Store and Forward :: Reliably push messages to servers or other devices via Exchange Server 2007. Programmatically notify peer devices that they have new orders waiting for them and need to sync.
MapPoint :: Guide delivery drivers to their customers via either the shortest or quickest route. Integrated mapping means you’ll never get lost again.
LINQ :: Use the new Language Integrated Query to filter results from Generic Object Collections. Query both your objects and XML using a familiar, SQL-like syntax to boost developer productivity.
Custom Controls :: Capture signatures and dazzle your end-users with 3D and Alpha-blended controls that alter their behavior depending on the platform they’re running on.

![clip_image001[4]](http://blogs.msdn.com/blogfiles/hegenderfer/WindowsLiveWriter/ThenewWindowsMobileLOBSolutionAccelerato_982B/clip_image001%5B4%5D_thumb.jpg)
![clip_image001[6]](http://blogs.msdn.com/blogfiles/hegenderfer/WindowsLiveWriter/ThenewWindowsMobileLOBSolutionAccelerato_982B/clip_image001%5B6%5D_thumb.jpg)
Managed Stored Procedures and Triggers :: The pluggable data layer allows you to say goodbye to compiling Dynamic SQL inside your code and fires events to react to INSERT, UPDATE, and DELETE operations.
Notifications and Online Help :: Formerly only supported on Pro, say hello to Popup Notifications and Online Help on Standard. Popup Notifications, also known as “toast,” display an HTML message and then disappear after a pre-determined amount of time. Using Online Help on every screen reduces your applicationtraining costs.
Language Switching and Localization :: Change Language/Regional Settings inside your app and watch text and Online Help speak a different language. Don’t wait until your application is finished to realize that it needs to be world-ready.
Time to Market :: Stop reinventing the wheel and use this Accelerator as the foundation for your next Windows Mobile development effort. If you don’t want to use the whole thing, pick and choose the components that are the best fit for your project.
Find out More :: The first Windows Mobile Line of Business Solution Accelerator has been downloaded tens of thousands of times and has served as the foundation for some of the largest and most important Windows Mobile projects in the world. Visit http://msdn.microsoft.com/windowsmobile to accelerate your career as a Windows Mobile developer.
Check it out!
-Reed
Well, I am about to get on a plane back to cheery old Seattle (and by that, I mean typical rainy spring in the great Northwest). I just finished up a nice trip to Orlando for the 2008 US Convergence show, and it was cool.
It was great to see and talk to so many customers and partners about the thriving ecosystem around MS Dynamics. But it was equally as cool as talk to them about mobility. No doubt about it, all of these folks wanted to know more about mobility and how they could take advantage of it.
We keep hearing about how the smartphone/converged device space will take off, but it's really nice to see it for yourself first-hand. And we're only looking at the tip of the ice berg. I have said this before, this space is exploding...we should all be happy to be a part of it!
On another note, I wanted to remind you all of some very coo ROI and TCO tools that we have available around Windows Mobile. If you are a certified or Gold Microsoft Partner, you can get access to these tools here.
I expect that the presence of Windows Mobile at the Convergence shows will definitely increase over time, as will our penetration into small, medium, and large businesses.
On a totally unrelated note, I was walking through Downtown Disney (yes, it deserves it's own special name with capital letters, evidently) and saw this in the window of the Virgin Megastore display. Yes, American Hair Metal!
Although I was unable to find the book in the actual store, I have since found the bugger on eBay...it should be arriving in about 5-10 business days :)
Cheers,
Steve
---------------------------------------------------------------------------------------------------
PS: Almost forgot...most of you, if you go to any of the trade shows where we have the WM booth, will recognize Erik Helgerson. He's a big dude...but evidently, when he's not tramping around in his home state, he REALLY like the Minnie Mouse Princess stuff :)

Some of you may be testing with Hopper now for certification and/or being asked to meet Mean Time To Failure (MTTF) bars as part of a relationship with a device maker. In order to be labeled a Windows Mobile powered device, the unit must pass a series of tests which are collectively known as the LTK (Logo Test Kit). If you ship your software in-ROM then your app becomes part of the stability tests they have to pass before release. There is nothing worse then to be sitting on a huge opportunity to ship in-ROM and find yourself as the focus of a failed Hopper test and holding up the device release.
Hopper isn't very smart, but he's surprisingly effective at exposing MTTF issues. Lately, I've had several partner become the subject of "Start Menu Dead" failures so I thought it might make a useful post.
For those of you unfamiliar with Hopper, it's a simple little app that basically simulates a 5 year old, jacked up on sugar that has taken over your mobile device. Tapping like crazy-- switching apps-- doing all kinds of things that a normal user might never do. Maybe that's not a completely fair description-- but think of a lot of random events that are periodically paused to make sure basic system functionality is still responsive-- like the START MENU.
Hopper runs for a period of time and reports a number of failure scenarios. Examples:
- Default system crash; this is where Hopper is not able to send keystrokes and mouse events.
- Start menu not responding. this is where Hopper is able to send keystrokes and mouse events but is not able to switch to any other application.
- Stuck in the same window, this is where Hopper is able to send keystrokes and mouse events but it detects that it is stuck in the same window for more than 15 minutes. Once this happens Hopper will attempt to dismiss the current foreground window by sending ENTER keys, sending simulated screen taps around the 4 corners and the center of the window, sending ESCAPE keys, try to find a button to click, and finally it will also try to switch away by clicking the Start menu. If none of the above attempts change the foreground window, it will quit and report a hang.
Applications that run in full screen (using SHFullScreen) can sometimes create problems for Hopper. Since Hopper likes to jump around, switch apps, and test the Start Menu-- it needs to be able to get out of an application running in full screen mode. Many full screen apps like games, navigation software, etc., will use a custom UI to take over the display and omit standard exit controls and window messages that Hopper uses. Once Hopper gets into a full screen app like this, it can get stuck and then report failures when it can't get out or access the Start Menu. When it does, your failure log will often look something like this:
Build = 15342 (OS 318)(Hop 2.0.15.7472).
Random Seed = 55592.
Previous runtime = 21 mins (0 hrs 21 mins).
Ended by: Start menu dead, not responding!
Boot count (prev): 3 (0)
ACTIONS/min = 149
Total States = 10
…
ACTIONS/min = 149; Total States = 10
FREE MEMORY: 75620 KB
FREE DISK: 25894 KB
EndType = Start menu dead, not responding
The important stuff
If you have an application that runs in fulls screen mode, be sure that Hopper can get out and access the Start Menu. If it sends a VK_THOME, it should always take you to the Home Screen. If it sends a VK_LWIN then it should always bring up the Start Menu. If you do anything to hold focus or prevent those messages from activating another window, then you will have problems. If Hopper cannot get out, it will try to dismiss your application by issuing a VK_ESCAPE and VK_RETURN on PPC (Classic/Pro). On Standard (Smartphone) it will attempt to dismiss by trying variations of the softkeys and sending a VK_TBACK. Make sure you handle those messages to close your app or release screen control in order to avoid the Start Menu Dead failure in Hopper.
Be sure to check out the Hopper blog for more info on using this tool.
Cheers,
Reed
I found myself in Breckenridge, CO over Super Bowl weekend enjoying an amazing mixture of skiing, food, and well-- a really awesome game. This was our annual "guys" ski weekend -- no shopping, no whining, no pony rides. Ski until you drop. Eat, watch some football, and ski again. Most of us have desk jobs, so after 6 hours we're all sore enough to die, but nobody admits it -- because that would be unmanly. Whoohoo! I feel great... ski on!!!!!! (OMG I'm dying... I'm 10 years younger than he is, surely he will die first ... then we can call in the paramedics and end this madness). Ah, Good times.
Anyway, I was soaring up the Rocky Mountain Super Chair and taking note of the high-speed lift mechanics and I couldn't help but geek out a bit. This thing is not unlike a communication channel. On one side, we've got skiers zipping up the lift to the top of the mountain and on the other side, empty chairs coming back down -- like an ack that the payload has been delivered. So here I am, attached to a circular cable system that was clearly moving along with great momentum delivering chairs. Is the top pulling or is the bottom pushing? Probably doesn't matter does it.
PUSH vs. PULL (POLL)
This is a debate that comes up a lot with Windows Mobile. Developers struggle with it designing architectures where mobile clients need to be notified of new data. They will ask, "how can I push notifications to mobile clients". I'll often suggest they have the client poll for updates and they look at me as if I've suggested they wear bell bottoms. SMS may be okay for some tasks, but there can be a cost and reliability issues. If you are in the "I want it now" group, then logic says that new server data should be pushed to the clients right?
IT guys are not immune to this either. They get dragged into the competitive PUSH email discussion... the idea that pushing is indeed superior which fuels the debate.
Hmmm.... I'm a sucker for this discussion. My opinion may only be worth 2 cents or so, but that's why we have blogs.
He started it!
Once the line of communication is open, push or pull has little relevance. Someone is listening and someone is talking, but the data is moving in both directions. PUSH is about who initiates the conversation.
The challenges of push
To truly do push, you need a mechanism on all your clients to constantly "listen". Your server also has to be able to locate and contact all your clients. This also involves error recovery when a network connection is broken or client becomes unreachable for other reasons (loss of power, no signal, etc.). It's a lot harder to do than one might think. It can put a huge amount of overhead on a server to simple manage client connections -- above an beyond actually trying to transfer the data. This also become a big problem when you don't exist inside a controlled network where there may be any number of layers of NAT going on.
It sounds like a good idea, but asking a server to initiate communication with a large number of mobile clients -- across networks outside your control is well... nearly impossible.
How polling is your friend
Okay, polling may be old school but the truth is that many applications use variations of polling and you probably never noticed it. When done well, then implementation is transparent and you just get timely updates. Examples?
* Desktop Outlook and yes, even Outlook Web Access
* Most RSS readers
* Web pages that use AJAX or refresh tags to update content
* Most client/server apps
* and yes... PUSH email on Windows Mobile
Did he say PUSH email is polling? Kind of... our implementation of "PUSH" email is actually initiated by the client so in a way, it is. Remember, once the communication channel is established, it's irrelevant whether we're talking PUSH or POLL, but the fact is -- it's a lot easier for a mobile device to initiate and manage the communication channel. It's more network friendly and also easier to secure. The important thing is that new data is readily available when you need it.
With any polling architecture, the question is "how often". With mobile devices this answer is a balance between battery life and user requirements. PUSH email is cool, but scheduled sync adds battery life to your device is you don't need updates right away.
If you have a very controlled network and need near real-time updates on your client, then maybe a true PUSH architecture makes sense. For most apps, it doesn't. Polling is your friend and if done well, all your users notice is that the information they need is there when they want it. It also gives your device a chance to make better use of its battery in between poll intervals-- especially over a network connection that has a high price on your battery (e.g. - there is a reason we don't do PUSH email over WiFi).
The important thing is that data is there when you need it and we've got a lot of cool options to make it all work.
I'll do some future posts on some of the ways to build sync architectures with Windows Mobile as this is going to be a hot topic in the months to come.
Cheers,
Reed
Thought many of you might enjoy these sessions...
February 12, 2008
Windows Mobile Part Two of Three
Discover why Windows Mobile is the optimal choice for your organization and IT professionals. Join Windows Mobile experts Derek Snyder and Brian Hoskins to learn the top features of Windows Mobile for business and how Windows Mobile with System Center Mobile Device Manager can help IT professionals decrease support time, simplify and centralize management, provide more secure access to corporate data and extend line of business applications to mobile workers.
We also have our February 2008 Security Bulletin with Kai Axford and Bill Sisk.
Length: 0: 30:23
WMA | MP3 High | MP3 Low
To save to your computer, right click and choose 'save target as…'.
February 5, 2008
Windows Mobile Part One of Three
Discover why Windows Mobile is the optimal choice for your organization and IT professionals. Join Windows Mobile experts Derek Snyder, Brian Hoskins and Dan Arildson to learn the top features of Windows Mobile for business and how Windows Mobile with System Center Mobile Device Manager can help IT professionals decrease support time, simplify and centralize management, provide more secure access to corporate data and extend line of business applications to mobile workers. This session covers Part 1. Stay tuned for Part 2 and 3!
Length: 0: 30:25
WMA | MP3 High | MP3 Low
To save to your computer, right click and choose 'save target as…'.
Well, Steve is off to a blazing start this month and I have to admit there is a lot of news and rumors amid Microsoft and Mobile World Congress. In between all the rumors and announcements, I ran across something a bit different. It was a transcript and video of Bill G's remarks at Harvard Commencement. For those of you who know his history, you might understand why it's an interesting speech for Bill to give. I'm always struck to hear of the amazing stories that summarize one's life journey. What an interesting read this one is. (I rambling a bit here and this really isn't Windows Mobile, but I think it's very cool).
Anyway, so one of my promises of the new year was to do some shorter posts and avoid my typical techno-manifestos. Some simple tips here and there right? I'm trying to make good on it...a couple of things I ran across this week:
MSMQ - It's one of those technologies that was huge in the desktop/server space, but little known on Windows Mobile. Push data into a queue and another server of process can deal with it. With Windows Mobile 5.0, we added some cool support to allow sending over HTTP and building in some invisible logic to do it when a connection was active (so your app didn't have to figure it out). We tout SQL Server replication which is a vastly more powerful way to move data between a mobile device and a back-end, but MSMQ is still a simple option very few people think about-- and ideal for some scenarios.
Anyway - someone asked me this week if there was a way to make the MSMQ service components automatically load during boot on WM5/6. It turns out that the redistributable components on MSDN don't have a valid signature on them which is required to for anything that loads as a service or a driver. This is why you have to manually start the service. All you need to do is sign the components (e.g. - msmqd.dll) with the priv developer cert and provision your device with the SDK certs and you should be good to go. In an enterprise environment, you could use your own certs. We're working to get the MSDN package properly signed, but that's a tip to help you out until it happens.
Want to learn more about MSMQ? Check out these posts that go into more detail:
http://blogs.msdn.com/marcpe/archive/2006/02/01/522112.aspx
http://msdn2.microsoft.com/en-us/library/ms229665.aspx
or a MSDN Webcast.
Is there a way to make the old Remote Display Power Toy work with Windows Mobile 5 & 6?
Yes...The old Power Toy will still work, it’s just a bit clunky since the connectivity code is old and needs a little encouragement. If you:
1) copy the applicable certdisp2.exe to your device
2) disconnect the device from ActiveSync or WMDC
3) execute asrdisp.exe -m on the desktop
4) start certdisp2.exe on the device and attempt to connect
Viola-- connection and remote display....
Power Toys are basically cool little tools that someone inside Microsoft writes in their "spare time". Someone says, "hey, that's a great little tool.. maybe our developer community could benefit from it!". Occasionally, we package them up and share them out (okay, I'm simplifying a little) but they are largely unsupported and they don't have a maintenance budget behind them. It still works, with a little love.
If you really want a great remote display tool, check out SOTI. SOTI makes an amazing little product called Pocket Controller that has all these capabilities and more.
Cheers,
Reed
Okay, I have heard time and again that Windows Mobile phones aren't very sexy. I personally disagree...I think it's a matter of taste.
Having said that, I can see some peoples point about some devices. But if you've been following the MWC news, then you've already seen this bad boy :)
I have to admit, this is one nice piece of kit. I'll have to figure out how I can rustle one up.
On another note, though, this is just a taste of things to come. Windows Mobile is a great platform...sure, there are always areas to improve upon, but we are working closer with our partners then ever before to create compelling experiences that harness the goodness that IS Windows Mobile.
So, hopefully this is the first step of many in the right direction :)
Yes, it's that time again. The time when everyone in the mobile industry leaves their homes and swarms on the city of Barcelona. It used to be 3GSM, but now it's the Mobile World Congress (impressive sounding, ain't it)!
This year, I personally will not be in attendance, but just about everyone else in the Mobile Communications Business at MS will be. In all fairness, everyone should probably go once just to experience it. The amount of announcements are always staggering, and we have our own to make at the show as well :)
So, are you going? Or are you skipping the crazy longer days and longer nights? In either case, the events that unfold next week will be fun and interesting...and this is always a good way to kick off a new year.
Have fun in Barcelona next week,
Steve
After developers master the art of building CABs and signing code, they often look to compliment their deployment story by providing a desktop based install package.
There are a lot of reasons to have a desktop install for mobile apps. Many end-users are simply used to (and more comfortable with) running desktop installs. You might also build a desktop application that *extends* to a mobile device -- install the desktop piece first and then push out the right mobile CAB as the mobile client. What if you ship multiple versions of your software for all the versions of our platform and want to simplify the user install experience (e.g. - WM2003 Pocket PC, WM2003 Smartphone, WM5 Smartphone, etc.) to the end user doesn't have to figure out which CAB is the right one. My point is...many partners still have their reasons to ship multiple app versions and multiple CABs.
What about the enterprise? Some enterprise customers will use over-the-air (OTA) deployment products, but many still need to work with desktop based management software, so desktop installation is far from dead...we still need this scenario.
So how do you build a desktop install for a CAB?
When you ask this question, developers commonly start talking RAPI and thinking of ways to write code that will interrogate a connected device and push out a CAB. You could certainly write it yourself... but did you know that ActiveSync and WMDC already do this for you? No major coding necessary.
Some CAB Basics
Before I go into more detail, let's first cover the basic concepts of what happens when you install a CAB on Windows Mobile.
If you look in the registry to see what a .CAB file is mapped to on the device, you will find it simply launches a program called WCELOAD.EXE. WCELOAD is the device side application that is responsible for unpacking a CAB and directing the install sequence for the content. It also supports a number of command line params to control exactly how it behaves (silent install, no uninstall option, etc.). We won't get into all of that here, but if you are interested in those options, go check out MSDN here.
When I select a CAB on a Windows Mobile device, what I am really doing is simply launching WCELOAD and passing it the CAB as a command line param. WCELOAD unpacks everything and handles the install details through a couple of worker processes it spins off. This include calling any custom setup DLL you may have packaged in there and adding all the plumbing to use the UnInstall CSP to remove the app later.
That's what happens on the device... so to make it happen from the desktop, you just need to push out a CAB over ActiveSync and launch it right?
Introducing CeAppMgr
Installed as part of ActiveSync and WMDC, there is a desktop application called CeAppMgr. You have probably seen it run and never realized what it was. It's role in life is to push out and launch the install of a CAB on a device that may be connected to the desktop. It already knows how to identify the device connected to your desktop-- platform, version, etc. It follows a set of rules to make sure the CAB it is pushing out is valid for the connected device. It will also queue up a CAB to install on the next connection if the device is temporarily disconnected.
CeAppMgr and it's workings are not well documented so