This morning I submitted the first build of Roomr 4.0 to Apple for Beta Testing.
I know it has only been three months since I released 3.0, but I’ve decided that since I’ll adding two or three large new features, that 4.0 seemed more appropriate.
So what is coming in 4.0?
With Roomr, there have been a few consistent feature requests.
- Browse all the rooms like I do in Outlook.
- Invite people to meetings.
- View the details of a meeting.
I’ve resisted implementing some of these (2 & 3) because I felt they were in keeping with the spirit of the app. Request 1 was due to sheer complexity. Roomr uses Exchange Web Services for availability, but this doesn’t offer any access to the Address Book within Exchange.
Browse all the things!
After pushing back, I decided to roll up my sleeves and try to tackle request 1. Lots of people had written to me asking why they couldn’t browse rooms. When I explained that you could using Exchange Room Lists, I was met with blank stares and comments like “My IT guys won’t do that”. I took the stance of “sorry, but hard cheese”.
On reflection, this wasn’t the best idea I ever had.
You see, Browse required an upgrade to Pro or the purchase of the Pro version.
You can imagine that a lot of people were quite pissed off that, having upgraded, they still couldn’t browse. I’ve seen quite a few refunds issued because of this. I mean, I don’t blame people, in spite of the fact it was clearly stated in the description of the app that Room Lists were required. People see it work in one bit of software and expect it to work like that everywhere.
I rolled up my sleeves.
Exchange implements a protocol named MAPI. This, traditionally, is accessed using RPC. RPC is hard and really low level (we’re talking TCP streams). I wrote RPC implementations in C back in 2002, so I was no stranger to it.
Thankfully, Microsoft have “upgraded” this over time, offering RPC over HTTP. I read the specification. Twice. And decided that wasn’t going to happen anytime soon. With Exchange 2013, Microsoft added MAPI over HTTP. Not exactly JSON based, but doable. It was still binary, just blobs of bytes sent over HTTP, which, in reality, is no different from a JSON based request. Old School.
I read the docs and set about building an implementation in C# that used lots and lots of Byte. After lots of short bursts of work spanning a few weeks, I got it working. I then ported it to Objective-C and, after more trickery, I got it working with Roomr.
This screen shot shows the updated Browse view, where you can see the All Rooms address list and the Room Lists.
Expanding the All Rooms list shows all the meeting rooms within Exchange.
I’m pretty proud of myself right now.
I hope this will make Roomr much more useful to people, since they won’t be replying on their IT guys to create and maintain Room Lists. I also hope it’s more accessible.
I’m planning on making Browse “free”, so it won’t require the upgrade. I hope this will encourage more use and by making other features premium ones, such as booking and opening appointments, I’ll encourage more conversions.
I will only know if I try.
If you’d like get an early look at Roomr 4.0, please get in touch and I’ll invite you to the Beta. This
This stuff is all quite new, so the more instances of Exchange it is tested against, the better.
Thanks for reading,
PS I’ll be writing up a post on how I got MAPI over HTTP working. I’m sure about four people in the world will find it interesting, but it’s been an experience trawling through 9 different PDFs and reading hex code