Lazy Dialing Made Accessible

Have you ever been ever so slightly lazy when it comes to making phone calls? No, I don’t mean procrastinating when it comes to making calls you for some reason don’t feel like you’re in a hurry to do. But the kind of laziness where you feel it’s a hassle to pick up the phone to send an sms, and end up doing it on your desktop instead. I have a plug-in in Outlook that will let me send sms, or I could do it via something built upon Kannel, etc, so that’s sorted though. I decided to have a look at something similar for making calls from the desktop.

Now, I am aware of a product called Office Communications Server, and vendors like Cisco with their software. That’s besides the point for now though :) Just like food, it tastes better when it’s home made. (Or rather you learn more making your own pizza than having it delivered.)

While browsing the Compact Framework API for something completely different I stumbled across easily accessible methods that will allow me to make calls programmatically. It’s really no effort as you can see from the few lines of code below.

image

In this case I’ve created a small console application (no graphical interface) that dials the number “1234”, but I could use a number supplied as an argument too for that matter.

Hey, this is nice for spying purposes! Well, no. It’s not placed as a “secret” call in the background. The user will notice that the device makes a call, or notice after the call has been made if it was in his pocket at the time.
image

It’s not a feature complete program at the moment. We’re missing a delivery system – I mean, we can’t have a program on the device without there being some desktop/server side mechanism of triggering the client. If you have an MDM solution that let you do push of management commands it could work. Or you could send an sms from the server, intercept the message, and trigger it. You could expand the client to listen to some server, and do something a bit like ActiveSync.

But isn’t this a light overkill when you could just pick up the phone and use the keypad directly? Well, the best thing after sliced bread it certainly is not, but it could make things more user friendly in some scenarios. Take for instance a phone list on the intranet – look up the number, hit “dial” and you’re off. Or if you’re sitting in front of the desktop most of the time, wearing a headset, and making calls while the device is somewhere else on the desk. (No function to hang up here though, so maybe you should still keep the device nearby.)

Anyways, some times I just come up with crazy ideas, and leave it for others to decide if it’s worth pursuing further :) I haven’t attached a download of the program above, but if someone is interested I could probably do a proper compile and upload.

Ah, but how to test the program, passing parameters without a command line? (I cheated and ran it through Visual Studio.) I’m sure some of you are already familiar with Rapi Tools – the rest of you download them, and add them to your toolbox:
http://www.xs4all.nl/~itsme/projects/xda/tools.html

Very convenient. Use prun.exe with the app executable and parameters on your desktop, and the device executes. (You need to cradle with ActiveSync so it really only serves a practical purpose in testing scenarios.)
image 

So I’ll talk to you later then :) (Ah, the hilarious puns one come up with late at night…)

Building Your Own Appliance Box

I’m a sucker for Beta programs. The feeling of getting some shiny new software in your hands is a good one. So a couple of weeks back I joined the Quebec beta on Microsoft Connect. (Formal name Windows Embedded Standard 2011.) I decided to test drive it as an OS for building an appliance, and Kannel seemed a good choice for a very basic setup. More on that later – first a few introductory lines on Windows Embedded (and explaining how it’s related to mobility).

Ever since Microsoft got started with the Windows product line they’ve worked hard to have an OS variant ready for every need. Well, obviously they didn’t have that back when they released Windows 1.0, but they’ve continually worked towards it as a goal in my opinion. Up until Windows NT the desktop computer was the main concern, but with NT Server they branched into servers as well. (Digressing for a short history lesson – did you know that Mr. Bill G himself recommended OS/2 for workstation use and not Windows for Workgroups? Microsoft and IBM were in cahoots at the time and collaborated on both OS/2 and Windows NT 3.1. You could install a Windows app in OS/2 and it would simply work, and in many cases work better than it’s native environment. Wouldn’t work the other way though. Eventually things soured between the two business partners, and OS/2 Warp flopped even though it was a great piece of an operating system.) Not feeling everything was covered by these two editions work started on a stripped down version of Windows known as Windows Embedded/Windows Compact Edition. This was also to form the platform for the Windows Mobile line later on. (Trivia bits: Windows CE 4/5/6 releases all got their codenames from whisky.) Now I know there’s a lot of differences between Windows Mobile and Windows Embedded even though some of the core bytes are the same, but nonetheless I found it interesting to get to know Embedded a little closer.

A benefit of Windows Embedded is that it’s designed to be run on computers with low specs, so I thought maybe I can recycle some old hardware. My initial purpose was to build a media center, but the media center bits aren’t included in this release so I had to nix that idea. The next thought I had was to build a Kannel server just for the fun of it. I usually promote running services on a server OS not a client OS, but beta is beta, and it’s not like I would recommend this for a 24/7 production environment.

Windows Embedded is highly modular, and you can nail down exactly which elements of Windows you want to install. Never going to use a feature? Don’t install it in the first place. This does mean that you need to know what you are doing. Don’t expect .Net applications to work if you didn’t include the necessary module for that.

You have two main options for deploying Windows Embedded – create a custom image with answer files, or just boot off the iso you download from Connect. I inserted the iso in a Hyper-V guest, and fired it up. (A virtual appliance might seem pointless to you, but it’s so much easier to test and do screenshots before going with real hardware.) This is what it looks like:

Quebec_01  
“Build an Image”.

Quebec_02
You can go for a pre-defined template, or roll your own custom image. I chose “Minimum Configuration”.

Quebec_03

Quebec_04
You can modify both included drivers, and features to get it just the way you like it. Really cool is that you can change to a bootable USB stack which means you can run Windows off a USB stick – and not just install from a stick like Windows 7.

Quebec_05
Overkill deluxe, but it’s the default size for dynamically expanding disks in Hyper-V, and it doesn’t actually consume that amount of gigabytes either.

Quebec_06
Shouldn’t take too long.

Quebec_07

Quebec_08

Quebec_09

Quebec_10
Windows Update doesn’t really work as of know with my minimal installation.

Quebec_11

Quebec_12 
The stripped down template doesn’t even include the regular Explorer Shell. Just the cmdline. (Obviously you might want to include the shell for some scenarios – like actually testing and playing around a little with your new OS.) As you can see in the bottom right corner it is based on Windows 7 so it has UI elements matching the regular Windows experience.

Quebec_13
Mounted the Kannel files as an iso, but would work equally well copying from a USB stick.

Quebec_14
2 cmd shells is all I need for the basics.

Quebec_15
Seems to be running like they should. Oh, yeah, you might want to test your Kannel.conf before loading it into your “appliance” since you don’t have Notepad :)

Kannel_Status

The http daemon is running too. Needless to say this was tested from a different computer.

Now this isn’t rocket science or anything, but goes to show how you can have a little fun sidetracking a few hours from your most used operating systems. Oh, right, specs. It’s running totally smooth with 512MB of RAM, (it will refuse to install with less), and the entire vhd file takes up 624MB of space after compacting the drive. Not too shabby if you ask me.

DojoCert – Maintenance Release

Maintenance programming isn’t considered to be the most exciting work a programmer can do, but nonetheless we all have to do it every once in a while :)

This is just a quick Maintenance Release of DojoCert, with one minor feature change. While it was assumed that SSL would be used for enrolling I have added a checkbox that will allow you to enroll without using SSL. (By default it will be enabled.)

image

Mind you, I would still recommend using SSL, but for testing it can be convenient to test without SSL. By default a Microsoft CA will not let you enroll via the web interface without SSL, so while I haven’t checked if this holds true for programmatic enrollment it may very well be the same condition that applies.

If you don’t need to control the SSL parameter you can continue using the previous release.

Link: http://mobilitydojo.net/files/DojoCert_101.cab