CALENDARING in the 21st century – a shambles!

I received an meeting appointment email today that had an ICS file attached. It was from an Australian client, so getting the meeting into my calendar with the correct time is very important. If the meeting is scheduled for 6pm, Sydney time, it needs to go into my calendar in British Summer Time. Seems pretty simple.

Sadly, it’s not. I’m using Windows 8.1 Update 1 at present. In my Mail app, I can see the appointment very clearly. As I use a single calendar for my appointments, hitting the “Accept” button would just add it to the wrong calendar, so instead I click on the invite.ics file.

image

And this is what pops up! WTF?

image

A quick search of my machine shows I don’t even have Outlook installed!!!

image

I would, at the very least, have expected this to open in the Metro Calendar app. Sadly, this app doesn’t seem to support this file. What a joke.

To add insult to injury, the Windows OS is actually bested by iOS, which supports ICS files without issue. Typical.

Simple activity notifications for your applications

As part of my work on Drinks4-You, I decided that I wanted to get an alert to my phone each time a user signs up. I’ve worked hard on the platform and the other members of the team have worked even harder on generating sales and promoting the platform, so getting a little alert each time we get a new customer is very exciting!

Rather than a vanilla email each time a user signs-up, I wanted something a little more dramatic. A signup is an important thing, so I wanted an alert to match the gravity of the situation. What better then the Inception “BWONG” noise?

I spend a few hours and created a simple iOS  that would display the notifications and play the cool noise!

I then began to wonder if other people might need something similar. I quick search revealed plenty of providers of Push notifications, but they required that you have your own app. A small company might not have any iOS expertise or cannot spare the to create an iOS app for just one thing.

From this, Heads Up was born.

Heads Up is a simple iOS app that lets you register for notifications from your own apps. Your app only has to send a PUT to our Heads Up API and your device (or devices – using a PIN code other people can get the same notifications e.g. members of a team) will receive the message and play a sound. It’s simple, but can be used to alert you of errors in your service, important user activity or for a bit of fun.

Marketing1

You can sign up for the Heads Up mailing list if you want to be part of the beta test. I will be charging for the service eventually as I need to cover hosting and network charges, but until it launches officially, the beta will be completely free.

Sign up for the beta using TestFlight

Selling a Roomr–How I sold some Objective-C code.

Apologies for the terrible title!

I recently completed the sale of some iOS code that makes up my room booking app, Roomr (www.roomrapp.com) to a company in Belgium. A user on Twitter asked if I would write a short post on the sale and voila, here it is.

To give you some background, my app Roomr is a simple iOS app that connects up to Microsoft Exchange and allows you to view the status of meeting rooms. In addition, you can see a room’s full daily calendar and also book meeting rooms. All from your iPhone. To the best of my knowledge, it’s the only app of it’s kind.

Despite it’s uniqueness, sales have been very slow, topping around 25 a month. I’m putting this down to a few factors, but they are outside the scope of this post!

Around mid-April, I got an email from a developer in Sweden asking if I would be interesting in selling the source code of Roomr as they had an in-house project to develop an app with some similar functionality. They stated that I’d retain ownership of the code and would be able to continue developing upon it and Roomr itself would remain in the store. This seemed like a good proposition.

I just needed to put a price on my code.

I reached out to Twitter for some help and got lots of answers and suggestions. The common thread running through the responses was that the sale would be worth about 20%-30% of the total development effort. So if I spend 100 hours writing the software, I could charge for about 30 of those hours. This made some sense when I considered that I had no documentation etc.

I agreed to the sale, but my client needed to get approval before we could continue.

Time passed, as it does, when another email arrived in my inbox from a company in Belgium offering to purchase the code for Roomr and even offered a price. This price, I’m pleased to say, matched what I had quoted the Swedish developer, so having some validation there was nice. We discussed terms and they matched the previous offer i.e. I’d retain ownership and could continue to develop and sell Roomr.

I agreed to the sale and began looking into software escrow as I assumed my buyer would want some contractual guarantees as well as safeguards to their money.

The buyer didn’t seem interested in that and offers to wire me the money in exchange for the code to be sent via email. I was surprised by this. Perhaps I’m getting too cynical, but it was nice to be trusted like that. I agreed that once the money was received, I’d transfer the code. I sent them an invoice and my bank details and one day later the money arrived in my account. I promptly zipped up and emailed the code over. A second email swiftly followed as I had neglected to include a 3rd party library causing compilation failures.

And that was it. The transaction was completed with all parties being happy. I managed to recoup some of the time I spent developing Roomr and I hopefully saved my buyer time understanding Objective-C driven SOAP calls to Microsoft Exchange!

Be Sherlock Holmes

I’ve had an idea in my head for the past few months so I decided it was time to put it down on paper and share it. So it’s a game. A game where you assume the role of the famous detective Sherlock Holmes.

I want the game to be based in London and it will involve the player and possibly their Dr. Watson companion, solving fictional crimes in London.

image

One a player signs up, I would see them receiving a text message from Inspector Lestrade. They would then have to make their way to Scotland Yard. Using the Smartphone app, the game would detect that the player was at Scotland Yard and the game would continue.

I would like the clues delivered to Sherlock using email, text and voicemail. The game would involve the user following the clues using a mixture of location and solving riddles etc.

The technology behind such a game would be simple enough for me to create, but what I really need is a simple story line to drive Sherlock’s first case. I have the option of trying to adapt some of Arthur Conan Doyle’s stories into my game’s format, but I’m not very creative when it comes to this sort of thing.

I’m therefore calling out to all fiction writers to see who would be interested in fleshing out such a concept into an actual prototype. If you’re interested in exploring this concept I’d love to chat with you about it.

Please get in touch – I’m @tomasmcguinness on twitter and can be reached at tomas@tomasmcguinness.com

Thanks!

The parts of my new PC have arrived!

After some faffin’ with courier companies (I’m looking at you UPS), all the parts of my new PC have arrived!

My current PC is an Alienware rig and it is 5.5 years old, but it is really beginning to show its age. After upgrading to Windows 8 I can no longer put the machine to sleep. This is due to some driver problem and unfortunately, I just cannot identify the faulty driver. Since Alienware have since folded into Dell, there are no more BIOS updates or anything available. I’m also beginning to feel the effects of only 4GB of RAM. As I do a lot of development work my memory usage is always up in the 80%-90%. The finally thing that annoys me about my machine is the noise. Four fans running 100% all the time makes quite the ruckus.

So, I decided last week to retire my old workhorse and I set about picking the components to replace it.

I settled on:

Corsair Obsidian Series 550D Black
Corsair H80 Hydro Series High Performance Cooler
Intel Core i7 3820, S 2011
16GB (4x4GB) Corsair DDR3 Vengeance
2GB EVGA GTX 680
Asus P9X79 Pro

I’m hoping for something that’s quiet, reasonable efficient but powerful to play Half Life 3 when it’s finally released. I’ll upload some pictures and blog about my experience putting the machine together over the next week, time permitting. Otherwise it will be after Christmas before I take a look.

Have you got any experience building your own machine?

I’m back!

After getting married and spending time away on my honeymoon I’m back in front of a PC! I’ve gotten a few emails whilst I’ve been away, so I’ll be working through them slowly.

Most interesting thing…I got complaints about my latest release of Roomr! This can only mean that people really care about the app, so that’s very positive. I’ve got a few changes in the pipeline which I’ll be working on straight away!

Even though I’m happy to be home, I could probably have done with another few days away Smile

GetPathRoot() –a cautionary tale….

This morning, whilst making a few changes to my dotnet-passbook library, I inadvertently ruined my PC by erasing files from my C drive. I want to pass on my tale of woe so others don’t fall into the same trap!

In response to an issued raised in GitHub, I decided to offer the ability to clean up temporary files after my library had generated a Pass. To do this, I had to make a few small changes to expose the path to the temporary file. As part of my OSS project, I have a sample web application that can be used to generate sample passes. I decided I’d try my code within my sample project.

I ended up with a piece of code like this:

try
{
    return new FileContentResult(generatedPass.GetPackage(), "application/vnd.apple.pkpass");
}
finally
{
    Directory.Delete(Path.GetPathRoot(generatedPass.Path), true);
}

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, “Courier New”, courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

Sadly, I didn’t realise that GetPathRoot would return C:

To compound matters, the ApplicationPool running my sample code was my own account, so it had administrator privileges!

Needless to say, when I requested the pass, my HDD light started flickering. Unfortunately I didn’t realise what was happening. Since the request was taking so long (deleting all my files is a time consuming business), I just cancelled it. I then tried to fire up VS and got an error. I took a peek at my source code folder and found all the files were gone!

Then the penny dropped.

I fired up system restore and restored the system back to an earlier date, hoping to undo the damage I had caused.

Alas, it was in vein!

IMG_1289

My laptop is beyond help. I have a feeling that I’ll need to reinstall Windows 8 from scratch…

I think there are two lessons here. Firstly, don’t run ApplicationPools with accounts that had administrator privileges. Secondly, read the documentation or intelli-sense when using methods that can be destructive. I’m surprised that Windows allowed my account to do this sort of damage, since I get a UAC elevation request whenever I try to change the system. Maybe ApplicationPools side step that?