Categories
Uncategorized

Upwardly Mobile, Part 2: Your First Windows Mobile 6 Application

treo_pro_large

(In case you missed part 1, it’s here. Be warned; it’s long, but it’s a good read.)

In this installment of Upwardly Mobile, I’m going to give you a quick introduction to developing applications for Windows Mobile 6 phones and handheld devices. I can’t cover all aspects of Windows Mobile development in this article, but there should be enough material in this entry to get you started.

What You Need

In order to build an application for Windows Mobile 6, you’ll need the following things:

Visual Studio 2008, Professional Edition or higher
visual_studio_2008_pro
This is the development environment. It’s not the only one that you can use to develop Windows Mobile apps, but it’s the one we’re using.

You can also use Visual Studio 2005 – if you do so, Standard Edition or higher will do. If you don’t have Visual Studio, you can download a trial version of Visual Studio 2008.
 

The Windows Mobile 6 SDKs
gear_icon
 
The Windows Mobile 6 SDKs contain the templates for building Windows Mobile 6 projects and emulators for various Windows mobile phones.

There are two such SDKs to choose from:

  • The Standard SDK. The general rule is that if the device doesn’t have a touch screen, its OS is Windows Mobile 6 Standard, and this is the SDK for developing for it.
  • The Professional SDK. The general rule is that if the device has a touch screen, its OS is Windows Mobile 6 Professional, and this is the SDK for developing for it.

    I recommend downloading both SDKs. You never know where you’ll deploy! 

  • .NET Compact Framework 3.5 Redistributable
    dotnet_logo
     
    The .NET Compact Framework 3.5 Redistributable is the version of the .NET framework for mobile devices. It only needs to be sent to the device once.
    A Windows Mobile 6 Device
    palm_treo_pro
     
    You can get by in the beginning with just the emulators, but you’ll eventually want to try out your app on a real phone. I’m using my phone, a Palm Treo Pro.

    As the saying goes, “In theory, there is no difference between theory and practice; in practice, there is.”

    The mobile device syncing utility that works with your operating system
    windows_mobile_device_center_icon
    If you’ve got a Windows Mobile 6 device, you’ll need the application that connects your mobile phone to your OS:

  • For Windows 7 and Vista, use Windows Mobile Device Center.
  • For Windows XP and Server 2003, use ActiveSync.
  • Let’s Start Programming!

    In this example, we’re going to write a “Magic 8-Ball” style application called Ask the Kitty. It’ll be a simple app that provides random answers to questions that can be answered with a “yes” or “no”.

    Fire up Visual Studio, open the File menu and click on Project… (or click control-shift-N). The New Project dialog box will appear:

    new_project

    In this example, we’ll be doing development in Visual C#. From the Project types list on the left, expand the Visual C# menu and click the Smart Device sub-item. The Templates list on the right will display the available templates for a smart device project; select Smart Device Project.

    (You can do Windows Mobile 6 development in Visual Basic if you prefer; there’s a Smart Device option under the Visual Basic menu.)

    Give your project a name (for this example, I’m using the name HelloPhone) and specify a location (I’m just using the default Visual Studio directory for projects), make sure the Create directory for solutioncheckbox is checked, and click the OK button.

    The Add New Smart Device Project dialog box will appear:

    add_new_smart_device

    You specify the type of device you’re developing for using the Target platform menu. My Palm Treo Pro is a touch screen device and uses Windows Mobile 6 Professional as its OS, so I’m going to select Windows Mobile 6 Professional SDK from that menu.

    We want to use the latest version of the .NET Compact Framework, so leave the default option, .NET Compact Framework Version 3.5, selected in the .NET Compact Framework version menu.

    We want to create an application, so select Device Application from the Templates menu and click the OK button. Visual Studio will create your project, and you can start developing. Here’s what you’ll see:

    visual_studio_1

    If we were writing a regular WinForms desktop app, the forms designer would show a blank window. If we were developing an ASP.NET application, the forms designer would show a blank web page, Since we’re developing a Windows Mobile app, the forms designer by default shows a blank mobile app window enclosed in a mockup – the “skin” — of a generalized mobile device. Here’s the skin for a Windows Mobile 6 Professional device:

    forms_designer_mobile_skin

    You can choose to display or hide the skin in the Forms Designer. I’m going to work without the skin; I can hid it by opening the Format menu and toggling the Show Skin item.

    Set Up the User Interface

    This application will use a single form. We’ll take the default form from the project, Form1, and do the following using the Properties pane:

    frmMain_properties

    • Rename it as frmMain.
    • Change its AutoScaleMode property to None (We don’t want the app to automatically resize its controls and fonts, we want it to use the control sizes and locations and font sizes that we specify).
    • Change its Size to 320,250, the right size for many Windows Mobile 6 Professional Devices including my Palm Treo Pro.
    • Change the form’s heading – set the Text property to My First WinMo App.

    We’ll set up the form to look like this:

    frmMain

    The “Ask the Kitty!” at the top of the form is a Label control, with its font set to Tahoma, font style set to Bold, font size set to 12 points and text set to Ask the Kitty!

    The “Click for an answer!” at the bottom is a Button control, with its font set to Tahoma, font style set to Regular, font size set to 9 points and text set to Click for an answer!. I also renamed the button as btnAnswer.

    The cat picture in the middle is a PictureBox control. The trick is to provide a picture to fill the PictureBox. It’s simple. The first step is to copy a picture file into the project directory:

    project_directory

    Make sure that the picture is included in the project. If you can’t see the picture file in the Solution Explorer window, click the Show All Files button. Right-click the picture file in Solution Explorer and select Include in Project:

    solution_explorer

    Once you’ve included the picture file in the project, you can use it to fill the PictureBox. Select the PictureBox in the Forms Designer, go to the Properties window and change its Image property – use the selector to pick the picture file that we just included in the project.

    Add Some Code

    There’s a lot of example code out there that puts programming logic inside the UI – that is, in the code for the forms. I’m going to avoid that and do the right thing by creating a class for the “engine” of this application. Creating a new class is easy – open the Project Menu, select Add Class…, and then select Visual C# Items –> Code –> Class. I named the class file Kitty.cs in the Solution Explorer; here’s its code:

    using System;
    using System.Linq;
    using System.Collections.Generic;
    using System.Text;
    
    namespace HelloPhone
    {
        class Kitty
        {
            List<string> _responses = new List<string< {
                "Yes",
                "No",
                "Maybe",
                "Ask again later"
            };
            Random _rand = new Random();
    
            public string GetResponse() 
            {
              return _responses[_rand.Next(_responses.Count)];  
            }
        }
    }

    The next step is to wire up btnAnswer to provide an answer when clicked. This means adding an event handler to btnAnswer. The easiest way to do this is select btnAnswer, then go to the Properties window, select the Events view (it’s the lightning bolt button) and double-click on the Click event. That will automatically create a method called btnAnswer_Click() in the frmMain class and wire up that method to be called whenever btnAnswer is clicked.

    Here’s the code for frmMain:

    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    
    namespace HelloPhone
    {
        public partial class frmMain : Form
        {
            Kitty _eightBall = new Kitty();
    
            public frmMain()
            {
                InitializeComponent();
            }
    
            private void btnAnswer_Click(object sender, EventArgs e)
            {
                btnAnswer.Text = _eightBall.GetResponse();
            }
    
        }
    }

    Run the App in the Emulator

    The app’ is now ready to take for a test run in the emulator. Click the Start Debugging button (it looks like a “play” button) or press the F5 key. This window showing your deployment options will appear:

    deploy_emulator

    I want an emulator that best matches my Palm Treo Pro, which has a square QVGA display, so I selected Windows Mobile 6 Professional Square QVGA Emulator and clicked the Deploy button. Give it a moment or two to compile and fire up the emulator, after which you should see this:

    emulator

    Run the App on Your Mobile Device

    Running the app on your mobile device is almost as easy. Make sure that your mobile device is connected to your computer, then click the Start Debugging button (it looks like a “play” button) or press the F5 key. This window showing your deployment options will appear:

    deploy_device

    This time, select Windows Mobile 6 Professional Device in the menu and click Deploy.

    Keep an eye on your phone; you’ll get a couple of “should I install this?”-type messages – click Yes to all of them:

    device_message

    After that, you should see this:

    app_device

    You should have enough information to start experimenting with Windows Mobile 6 development. Have fun, try things, and if you have any questions, feel free to ask them in the comments!

    Categories
    Uncategorized

    Last Night at EnergizeIT Toronto

    EnergizeIT: Anything is PossibleLast night, EnergizeIT – that’s the cross-Canada tour where we talk to developers, IT Pros, students and faculty about Windows 7, Windows Server 2008 R2, Software+Services, cloud computing, architecture and a whole raft of other things that are coming soon from Microsoft – hit downtown Toronto with the “Future of the Platform” presentation aimed at IT Pros and systems administration types. IT Pro Evangelist Rick Claus flew in to do the heavy lifitng by presenting solo; I was there for support and to answer developer-specific questions.

    Ballet School, on Maitland Street in Toronto

    In Canada, the phrase “I’m going to the ballet” tonight is sometimes used as a euphemism for “I’m going to the strip club”. So it was with great amusement when we found out that the venue for the presentation was Canada’s National Ballet School. I’m pretty sure I said “Well, I’m off to the ballet!” a dozen times before making my way to EnergizeIT.

    Ballet school main hall interior

    The presentation went quite well, with many people asking all sorts of questions about the new features in both Windows 7 and Windows Server 2008 R2. As with all the other EnergizeIT shows I have attended, many attendees either couldn’t wait to get their hands on the Windows 7 beta DVDs we were handing out or couldn’t stop singing its praises.

    I’ll close with this shot of Rick, whom I caught in a perfect moment – it looks like he’s doing the “Head Crusher” routine from The Kids in the Hall:

    Rick Claus doing his presentation: "I'm crushing your head!"

    Categories
    Uncategorized

    Computer Science Consulting Projects at University of Toronto

    I did developer evangelism work for a number of years prior to my joining Microsoft, and during that time, I dealt mostly with people who’d already graduated from school and were, as they say, “working in the real world”. Working with the Empire has given me the opportunity to connect with students at various events, from my speaking engagement at CUSEC 2009 (when I had my Richard Stallman moment) to doing career presentations at colleges for Microsoft’s EnergizeIT cross-Canada tour to seeing the FIRST Robotics competition to talking with faculty about their curricula. In the short time (it’s not quite six months) that I’ve been a Microsoft Developer Evangelist, I have found that I like connecting with students. So every now and again on this blog, I’ll be reporting on academic events, letting you know what tech students are up to these days and giving their work some much-deserved recognition.

    Graduate Students' Union building at the University of Toronto

    I spent the first half of yesterday afternoon at the University of Toronto’s Graduate Students’ Union looking at the handiwork of computer science students in the “CSC494: Computer Science Project” and “CSC2125: Topics in Software Engineering” courses. In these courses, the students had to take on a consulting project for a client, design and implement it as well a produce a report and present it, science-fair style at the end of the term. Yesterday was the “science fair” day, and the both the presenters and their audience packed themselves into the Graduate Students’ Union Pub to show off or see the demos.

    The crowd at the demo

    The course was taught by my friend, Professor Greg Wilson (co-editor of the O’Reilly book Beautiful Code), and he invited me and a number of other “industry representatives”) to see the students’ presentations.

    Greg Wilson, standing on a chair, addressing the students

    “Don’t be afraid to ask them hard questions,” he said.

    I was impressed by the work put into the presentations, which covered a wide array of topics from developer tools to personal software to hardcore engineering applications.

    It was nice to see some Microsoft tech in the projects. Jen Ruttan (with whom I have speak about presenting at U of T’s computer games club) used SAPI, Microsoft’s Speech API in her project, which was to develop a voice command system for the Firefox browser, which she developed with Windows and Visual Studio running on her MacBook. Now that’s what I call interop!

    Jennifer Ruttan and her project,

    The students were a mix; some were working on their undergrad degrees; some were working on their masters. All of them had a good deal of ambition; this doesn’t look like the kind of course you can coast through, and Greg is very good at finding talented students in the computer science program and shepherding them through the transition from student to professional developer.

    The crowd at the demo

    It was good to see that many of the applications built by the students would live on past the life of the course, used by the consulting clients.

    Many of the projects were outside my domain of knowledge, but one was smack-dab in the middle of it: an assessment of NFSv4 as a storage system for the email service of Tucows, for whom I worked for nearly 5 years. Ziad Hatahet’s and Vivek Lakshmananassessment’s assessment — “It’s not yet ready for prime time” — probably saved the company a lot of money, effort and heartache. Well done!

    Ziad Hatahet and Vivek Lakshmanan

    The projects in the course, the students who worked on them and their clients are listed below. You can find abstracts for the projects in this brochure.

    • Parallel Transparency Rendering, by Hanieh Bastani for AutoDesk
    • Using GPUs to Simulate Fluid Flow Through Fractured Rock, by Ebenezer Hailemariam for Scott Briggs, Ph.D. candidate at U of T’s Department of Civil Engineering
    • The Programmability of Parallel Programming Systems, by Andrew Borzenko and Camreon Gorrie for Prof. Greg Wilson, U of T Department of Computer Science
    • Designing Video Games to Improve Spatial Abilities by Hoonan Bahadoor, Nikola Kramaric, Ainsley Lawson and Nick Shim for Prof. Ian Spence, U of T Department of Psychology
    • Better Spatial Models for ILUTE, by Torsten Hahmann for Prof. Eric Miller, Department of Civil Engineering
    • A Python Portability Layer for Version Control Systems, by Aran Donohue, Veronica Quinones and James Leung (U. of Alberta) for Basie
    • Connecting People with Books and Fellow Book Lovers by Arnold Binas, Laurent Charlin, Alex Levenshtein and Maksims Volkovs for Chapters/Indigo
    • Using GPUs to Accelerate Computer Vision by Anatoliy Kats and Mark McCartin-Lim for MDA
    • Improving Spam Filtering Through Botnet Characterization by Phillipa Gill and Lee Zamparo for MessageLabs
    • ORM-Style REST in Django by Mohammad Jali and Rory Tulk for Basie
    • Paraview Plugin Wizard by Matthew Ansell for Mirarco
    • Integrating StereoLogic and Websphere by Michalis Famelis for StereoLogic
    • Assessing NFSv4 Maturity for a Large Email Service Provider by Ziad Hatahet and Vivek Lakshmanan for Tucows
    • Making a Scripting Language Safer by Zachary Kincaid for Nitido
    • PubFeed by Andrew Trusty for Prof. Greg Wilson, U of T Department of Computer Science
    • Verifying Science by Alicia Grubb for Prof. Greg WIlson, U of T Department of Computer Science
    • Improving a Realtime Traffic Visualization System by Bijoy Mandal and Weichen Wang for Prof. Matthew Roorda, U of T Department of Civil Engineering
    • Talking to Mozilla by Jennifer Ruttan for Mozilla
    • Benchmarking the Usability of Scientific Workflow Tools by Fan Dong for Prof. Stephen Strother (Department of Medical Biophysics)
    • Making OCR Smarter by Michael Raimer for Adaptive Technologies Resource Centre
    Categories
    Uncategorized

    Using the Twitter API with PHP and PEAR

    PHP, PEAR and Twitter logos

    The Zend Developer Zone article Using the Twitter API with PHP and PEAR covers the Services_Twitter PEAR package, which the articles describes as follows:

    Services_Twitter works by providing a full-fledged, object-oriented interface to the Twitter API. This interface insulates you from the nitty-gritty of working directly with REST requests and, by representing responses as SimpleXML objects, makes it very easy to access specific elements of the returned data. This not only saves time; it’s also simpler, because it’s no longer necessary to be intimately aware of the nitty-gritties of the Twitter API in order to use it effectively.

    Categories
    Uncategorized

    Toronto Coffee and Code: This Friday at the New Dark Horse Cafe!

    This Friday’s Toronto Coffee and Code will take place at the Spadina branch of the Dark Horse Cafe, which opened just this week. The original Dark Horse Cafe, located in Accordion City’s East End, is a much-loved, much-praised cafe known for friendly service, excellent coffee and tasty snacks. This second branch is larger and in a more central location: the Robertson Building  in the Queen/Spadina area, where Chinatown meets the warehouse district housing the city’s tech startup and “Creative Class” crowds.

    Here are the details:

    • What: Coffee and Code
    • When: Friday, April 17th from 11:00 a.m. to 6:00 p.m.
    • Where: Dark Horse Cafe, 215 Spadina Avenue (at Sullivan Street)
    Map picture

    Here’s a sneak peek at the newly-opened cafe. Here’s the exterior:

    dark_horse_exterior

    …but inside, it’s a big, bright and beautiful space. Here’s the first thing you see when you walk in: their wide, welcoming coffee bar.

    dark_horse_coffee_bar

    The cafe is split into two levels: a lower level at the front of the cafe and an upper level in the back. Here’s a view of the lower level, as seen from the north end:

    dark_horse_lower_level

    Rather than fill the lower level with many small tables, the folks at the Dark Horse decided to use two ginormous tables, each of which can accommodate a dozen people quite handily. Here’s the square table at the north end of the room:

    dark_horse_lower_level_north_table

    And here’s the rectangular table at the south end:

    dark_horse_lower_level_south_table

    A small staircase to the left of the coffee bar leads you to the upper level located in the back. It’s more living room-like, with many small coffee tables and couches and chairs spread throughout:

    dark_horse_upper_level

    Here’s a view of the coffee bar from the upper level:

    bar_from_above_and_behind

    Their selection was a bit limited on their first day: they didn’t have chocolate for mochas, nor ice for iced coffees, and the panini presses still had the plastic wrap on them; that’s all forgivable for the first couple of days. They did have an interesting-looking selection of pastries, and the peanut butter cream brownie I had was worth killing for (I suspect that the Ginger Ninja would absolutely love it).

    It’s a gorgeous place with a lot of promise; my only real complaint is that it wasn’t around when I lived in the neighbourhood. I’m looking to hanging out there often.

    Categories
    Uncategorized

    “XZIBIT” Explains Virtualization

    XZIBIT explains virtualization: "Yo, Dawg! I heard you liek computers, so we put a computer in your computer, so you can compute while you compute!"

    Don’t get the joke? Know Your Meme does a fine job explaining the XZIBIT “Yo Dawg” meme in this article as well in the video shown below.

    Categories
    Uncategorized

    Upwardly Mobile, Part 1: A Brief Tour of Mobile App Development

    This one’s a long one! You might want to get yourself a beverage or snack.

    Windows Mobile Incubation Week: April 13 - 17, 2009 -- featuring two Japanese schoolgirls showing their mobile phones to Darth Vader

    This week is Windows Mobile Incubation Week, a “jam session” taking place at The Empire’s Silicon Valley branch, where startups are invited to learn about Windows Mobile from Microsoft’s gurus and pick up some tricks from mobile industry gurus and venture capitalists. They’re also challenged to build Windows Mobile apps during the week, with prizes being awarded to winning participants. Admission to Mobile Incubation Week is free-as-in-beer; all you have to do is scrounge up the cash to cover your trip to the Valley and find a couch to crash on at night.

    Even as a Sith Lord with Imperial backing, I don’t have the travel budget to get down to Silicon Valley to catch this event, and it’s likely that you don’t either. That doesn’t mean that you have to miss out on Mobile Incubation Week. I’ll be linking to all the blogs covering it and I’ll also be posting articles covering different aspects of Windows Mobile Development, some technical, some tactical. I hope it piques your interest in Windows Mobile; perhaps it might even get you started building apps for Windows Mobile phones.

    In this first article, I talk about mobile development over the past few years (with a little detour into my own experiences) and the way I see the current state of Windows Mobile.

    My First Mobile App

    Back in early 2001, I bought a PalmOS-compatible Handspring Visor Platinum for $99 from my then-coworker at OpenCola, Steve Jenson. He’s always had ridiculous amounts of hardware in his house:

    handspring_visor_platinum

    I used it regularly, but never got around to writing applications for it until early 2002. That’s when a number of companies building P2P software during the Bubble 1.0 era imploded and when OpenCola unceremoniously laid me off. I decided to put up my “consultant” shingle, and thanks to the network of contacts I’d built as OpenCola’s Developer Relations guy, it didn’t take long for me to dig up some clients.

    A friend of mine who was now working for a big drug company’s ad agency asked if I could write a questionnaire app for PalmOS handhelds. It wasn’t anything too complicated: just give the user (who could either be a doctor or a patient) a series of questions and provide a response at the end based on their answers. The tasks seemed simple enough, and despite the fact that I’d never written a Palm app before, I took the job.

    (For those of you new to the industry, you’ll find that that you will often be asked to do things that you’ve never done before or aren’t 100% sure you can do. One of the valuable skills that comes with experience is figuring out how far you can stretch yourself and your abilities with a project.)

    I’d seen a couple of articles on developing for PalmOS in C, and they looked like more work than they were worth. An app that was made up of a single button that read “Hello World” took 3 or 4 pages of code to implement, most of which was what I call “preamble” – a lot of setup code and “scaffolding” to support the app, way more code than for the actual app itself. My client seemed to be testing the waters of Palm apps, so I figured I’d be asked to make lots of changes to the app along the way. I needed something that would let me build and modify Palm apps quickly.

    nsbasic_palm

    My plan was to build the app with NS Basic/Palm, a Visual Basic-like development system for PalmOS. I’d heard about it before, and as an added bonus, they were based right here in Toronto. I picked up a copy directly from their offices in the morning, and by the end of the afternoon, I had a functioning version of the app. By the end of the next day, I had it polished. The day after that, I showed my work to the client, and a week after that, they cut me a cheque.

    I thought I’d make a career for myself as a PalmOS developer, but after that initial success, no other clients approached me about building a Palm app for them. That was a bit of a disappointment; unlike many of my friends, who wanted to build system- or network-level software, I wanted to build software for people. I figured that the best platform for people-oriented software would be a computer that you had in your pocket with you all the time.

    The Underused 1995-Era Computer in Your Pocket

    1995 tech zeitgeist, featuring NCSA Mosaic, Apple Newton, Windows 95, Delphi 1.0, Visual Basic 4.0, Microsoft Bob, a Zip drive and "Special Edition Using Java 1.1"

    One of the things that I noticed while building Palm apps in 2002 was that the machine specs were like the specs for desktops back in 1995, when I was building CD-ROM-based multimedia apps with Mackerel Interactive Multimedia. The desktops of 1995 had processor speeds in the double-digit megahertz, RAM in the single-digit megabytes and limited, if any, access to the internet – just like 2002-era PalmOS devices.

    At the same time, there was a class of devices that was beginning to emerge – the smartphone, which combined the connectedness of mobile phones with the computing power of PDAs. The problem was trying to get apps onto them.

    Back in late 2003, when I was just getting started as Tucows’ Tech Evangelist, I wrote an article grumbling about the state of mobile development. In spite of the fact that smartphones had the power of PDAs, the market for mobile apps seemed like a ghost town. There was a mish-mash of all sorts of mobile platforms, installing apps on your mobile form was more complicated than it should’ve been, and the telcos seemed to be doing their level best to keep apps off of phones, using the need to “keep the phone network secure” as their excuse.

    “Imagine how far behind we’d be,” I wrote back then, “if we had to get our computer vendor’s permission every time we installed a new program on our desktops. That’s what it’s like for mobile apps.”

    The Best Gaming Phone, 5 Years Ago

    Near the end of 2003, this phone was supposed to be the thing that brought mobile gaming to the masses:

    Nokia N-Gage

    It was the Nokia N-Gage. There’s a good reason you probably never owned one, nor did anyone you know. While it had some decent specs, it was a pain for both developers and users alike:

    • Pain for the developers: Not just anyone could develop for the N-Gage. You had to apply for permission to do so, which required you to have a track record of mobile game development, which probably ruled out a lot of potential developers in 2003. There was also the matter of the fee that you had to submit while applying for the privilege of being an N-Gage developer: the non-trivial sum of 10,000 Euro.
    • Pain for the users: The buttons were notoriously bad – they used phone-grade buttons as opposed to game controller-grade ones, which made for a less-than-optimal gaming experience.
    • More pain for the users: Here’s how Brighthand described the process of loading a game onto the N-Gage: “"In order to put a game into the system, you have to turn the phone off, take the back cover off, remove the battery, slide out the existing game, put the new one in, put the battery back in, replace the back cover, hold down the power button for several seconds, wait for the system to boot up, open the main menu, select the game, open it… And then your game starts loading."
    • Even more pain for the users: The N-Gage sometimes suffered from “The White Screen of Death”, a phenomenon where your phone would spontaneously reboot thanks to a memory management issue arising from a design flaw. The fix was a firmware upgrade, for which Nokia decided to charge users.

    I thought that the N-Gage had all kinds of portable personal computing uses, both for gaming and beyond, but there was no way I could develop for it. Besides, the telcos were still pretty adamant about not letting just anyone develop for smartphones.

    So my plans to take on mobile development stayed shelved a little longer.

    Predictions are Hard, Especially About the Future

    Captain Picard doing a "facepalm"

    Depending on where your loyalties, sympathies and platform preferences lie, you’re going to find the following headlines either LMAO-hilarious or stool-softeningly cringeworthy. Maybe it’s because I’m still a relatively new at Microsoft (I’ll have been there six months a week Monday), but I laughed and cringed at these headlines that vaingloriously predicted that The Empire would dominate the smartphone market:

    “Dominate Smartphones in Three Years”, huh? Here’s what happened a mere two years later:

    iphone_line_1

    iphone_line_2 

    iphone_line_3

    In the space of two years and one day, we’d gone from Microsoft triumphantly declaring that Windows Mobile would own the smartphone market to Microsoft’s most famous evangelist (well, former evangelist by that time) doing a victory pose at the Apple Store because he’d managed to get his paws on one of the first iPhones.

    A good chunk of the iPhone’s success comes from Apple’s incredible marketing machine, but a bigger factor is that great products are their own marketing. The iPhone combines a great user experience and a centralized store, but far more important was the feeling that you were using something that was designed to be both beautiful and fun, not feasting on the table scraps thrown to you by a company who’d rather be making stuff for Fortune 500 executives.

    The iPhone formula seems to be working. According to Kevin Tofel of the mobile device blog JK On the Run, Apple sold 3.3 million iPhones in 2007 and handily beat that sales figure in 2008 with 11.4 million, making them the mobile phone vendor that gained the most ground that year.

    And Now, the Good News

    It’s not all bad news for Windows Mobile or people who want to develop for it. For starters, Windows Mobile still represents a sizeable chunk of the mobile phone market. 18 million Windows Mobile licenses were sold in 2008, and they were sold to four out of the five largest mobile phone manufacturers in the world (in case you were wondering, Nokia is the holdout). LG has signed on to put Windows Mobile on 50 of its smartphone models. All told, that’s a big hardware ecosystem on which to deploy your mobile apps.

    The smart moves that The Empire has been making with its various platforms, from Windows 7 to the web to XBox 360 to cloud computing, are also beginning to show in the form of Windows Mobile 6.5 (slated for release this year) and Windows Mobile 7 (due next year). The UI has been vastly improved; a lot of the UI lessons and ideas from Windows 7, XBox 360 and Surface seem to have made their way in:

    And yes, there will be support not just for client apps that run on your WinMo phone, but Widgets – mini-web apps that run in a browser with just a border and no interface controls, a la Windows widgets or the iPhone’s web apps:

    Windows mobile widgets

    Paired with the improved user experience is an online store accessible from your Windows Mobile phone:

    …and you still have the freedom to not use Windows Marketplace to sell your apps. I cover why that’s a good thing in the next and final section of this article.

    Freedom

    Let me show you some slides from Pete Forde’s recent presentation at MeshU, Is That an iPhone in Your Pocket, or are You Just Happy to See Me?. Namely, this section of his presentation:

    Slide: What Apple doesn't want you to do

    The iPhone App Store is the only legal way to distribute iPhone apps, whether you’re selling them or giving them away. As a developer, you submit your applications to the App Store for review, and in around seven days, after which you are told whether your app has been accepted or rejected.

    If your app is rejected, are you told the reasons why? Here’s Pete’s answer to that question:

    Slide: "Not gonna lie...it'd be easier to get Steve Ballmer using an iPod, than for you to get a straight answer on why Apple rejected your app."

    The people doing the reviews for the App Store are a toxic mix of Victorian-era prudish and Kafka-esque:

    "Pull my finger" was rejected for being indecent

    …and you can forget writing any David Mamet / Quentin Tarantino themed-apps:

    Slide: No swearing

    …and that’s not just “no swearing” in your apps; that’s also “no swear words” in any search results your app returns. Consider the problem faced by one hapless app developer:

    Slide: Each time, an Apple auditor loads their app, searches for the word "fuck", finds it in the 700k song database, and rejects their application.

    Slide: Of course, 99% of those songs are available for sale in iTunes. Apple will not directly respond to requests for clarification.

    They’re also kind of uptight about certain novelty apps, such as the one that makes it look as though you’ve shattered your iPhone’s screen:

    Slide: Apple was worried that this app, which "broke" the iPhone when touched, would confuse their customers. Golly.

    When you submit your app for review, whatever you do, don’t put any joke items in the feature list. One developer, when submitting an updated version of an app (yes, you have to submit updates for review) threw in a joke item in the feature list: more dragons! Here’s the response from the App Store review board:

    Slide: "What dragons are you referring to? There is no evidence of dragons in your application."

    The rest of Pete’s presentation was built around bypassing the App Store’s reviewer monkeys by building your iPhone apps as single-use browsers that were hard-wired to the web application where your app lived. That’s a workable solution for some apps, but not if you want to make use of the resources built into the iPhone.

    While the Windows Mobile Marketplace might have a review board for legal purposes, it’s not the only way to distribute your apps. You can also make them downloadable from your site, meaning that you can distribute your screen-breakin’, hard-cussin’, dragon porn Windows Mobile app without The Man steppin’ on your throat.

    Now isn’t that nice?

    Next

    In the next installment, I’ll provide a quick-and-dirty intro to writing your own Windows Mobile apps.