So, a few days ago I had an idea knocking around to make a Pomodoro timer. I’ve used Pomofocus every now and again but wanted to take a spin at it myself in VB. I was thinking of having it as a desktop application but then thought it’d be more fun to write it as my first proper Compact Framework application. I jotted a mockup down before going to bed, and got to implementing it today.
One thing I really like about Compact Framework development is its close similarities to Winforms. You get a designer (with the option to have a skin for any targeted screen size) and a subset of the controls you’re already familiar with. After about an hour and I had my first minimum viable product, something that could run within an emulator and on my phone. I even found out how to make those CAB installers.
Remember how I said that mobile development was really similar to Winforms? Well, that also means Compact Framework executables are more than happy to run under desktop Windows. (So long as you aren’t using any fancy device APIs, of course.)
A chunk of my time was then spent scratching my head and reading StackOverflow at how to implement playing sounds from the project’s Resources; I ended up giving up on that front, but was able to play the \Windows\Standard.wav sound and just do a system beep if that was not available (Desktop). Couldn’t have the pleasant sounds from Pomofocus unfortunately, rather a smidge loud beep sound. Perhaps later down the line.
Here’s the final version. I had polished up the UI by adding the arrow indicators on both sides of the screen when the timer is stopped, and replacing the mainMenu control with my own Start/Stop indicator label. All of these have Click events so they’ll work on desktop and Pocket PC. On desktop you can also start with Enter and switch modes with the keyboard using the same key codes internally as Windows Mobile. Convenient!
As I was making a release on GitHub, I found out I could actually target older platforms all the way back to Pocket PC 2003 (a touchscreen platform) without losing support for Windows Mobile 6.1 Standard (a non-touchscreen platform). I had thought that it would refuse to run, but it just worked. That was really cool to see.
I’m very happy with what I got done in the end. One more crossed off my idea list, and something I can really see myself using.
Oh right! You can find Tomate on my site or GitHub. Send feedback and help out if you wish. The CAB’s for installation on mobile devices, and the exe file will work on desktop. Check the readme if you need prerequisites.
(Sidenote: I’m not sure why Visual Studio packages with the CAB extension, uppercase. Alas, possibly one of those fabled Microsoft mysteries we’ll never solve.)