Brave Location Mobile Apps and Web Solutions

Final version of my Bedside Clock app shipped for Windows Phone 8

It’s been a great learning exercise, but I think I’m finally done with my Bedside Clock app for Windows Phone.

This was originally a project just for me to learn about developing for Windows Phone, and to replace the better built-in clock I was missing from my Android phone. You can probably tell this with some of the slightly gratuitous features I added (phase of the moon calculations anyone?)

However I’m almost certainly moving off Windows Phone very soon - and to be fair there isn’t much of interest left to do in the app - so other than fixing any serious bugs that are found I think I’ve finished working on the app.

The new version (4.0.0.1) is just for Windows Phone 8, although there are no new features compared to the earlier versions. I’ve just refactored the code a little to work with the new SDK, and added support for the new icon sizess and different screen resolutions supported by WP8.

As ever, it took a couple of attempts to ship the app. The Store test team seem pretty thorough in their testing, and they found a minor logic bug in the back button logic which had changed in WP8. This was easy to fix, but it is very irritating that you have to re-enter all of the store details and screenshots everytime, even when it’s just a minor changed to the XAP executable file.

If you haven’t already got my app and want to give it a try, click on the Windows Phone icon below to install it from the Windows Store, and let me know what you think!

Go to Windows Phone Store

N.B. This blog post has now moved to https://writingontablets.com

Choosing a new phone

Now I’m leaving Microsoft I’ll lose my corporate Windows Phone - and obviously I get to choose what to replace it now I’m paying for it myself.

It’s tough to know what to do, so I thought it might be interesting to look at different options and work through the pros and cons of each to help me decide what to do.

Option 1: Sticking with Windows Phone

I’ve really enjoyed my Windows Phone 7 (I haven’t been upgraded to WP8 yet). It’s a great interface, with the live tiles making it easy to see useful information at a glance. I’ve also enjoyed developing for the platform, with creating my Bedside Clock app being a great learning experience as well as being downloaded a surprising 16,000 times as of February 2013.

However.

I’m just sick of missing out on many of the most interesting apps (Instagram as a prime example) because I’m on the 3rd platform in an ecosystem almost completely dominated by the big two.

I don’t think there has ever been an app that has been released on Windows Phone first - not one I’m interested in anyway - and I just can’t see the platform gaining any traction any time soon. Sadly I think Windows Phone has just lost.

Option 2: Getting an iPhone

Much favored by my soon to be ex-colleagues at Skype, I’ve had a chance see more iPhones recently, and it can’t really be disputed that they are excellent phones.

All the newest and most interesting apps are bound to be available (sometime exclusively) on iOS, so you’re never going to be missing out choosing an iPhone.

Apple also seem to an excellent job of upgrading their older phones where possible, so you’ve good chance of always being on the latest and greatest version.

I see a couple of downsides though.

First, with Apple you definitely pay a premium price for their hardware and once in their ecosystem you don’t have much/any choice other than to stay in it. I don’t really want to pay that premium, or commit myself down that road. I’m not sure I can face using iTunes again.

More importantly, if I want to do any app development I’ve got to fully invest in Apple hardware - which means getting some sort of expensive Mac. This is a non-trivial cost too, and I’m not sure I’d ever feel comfortable again having a phone that I couldn’t easily knock out an app for if I had a need right now.

I’m very happy with my Dell Ultrabook, and may well consider a Macbook for my next development machine - but not right now.

Option 3: Moving to Android

Getting an Android phone sounds like the ideal compromise for me. Some of the latest hardware is very nice, and the ecosystem has a range of apps available very close to that of iOS.

Also, with a copy of Eclipse on my Windows laptop it will be pretty straightforward to develop some apps without a big investment in additional hardware.

So what’s the downside? Well, the Android interface is just a little ugly. I had an Android phone about 3 years ago and it just didn’t have the polish of the other systems. Maybe things are much improved with Android 4.0+ though? And maybe I don’t really care so much about that polish if the functionality is there?

Option 4: Blackberry

No

And the winner is …

So after all that, I think I’m going to get a Google Nexus 4.

Why that handset? I think from a developer’s point of view, having a phone that has the best chance of being updated - in the totally fragmented Android ecosystem - seems a good idea.

Disagree?

N.B. This blog post has now moved to https://writingontablets.com

Leaving Microsoft (again) but back at Bing (again)

So after much thought I’ve decided to leave Microsoft and concentrate on my BraveLocation work full time.

However for the next few months at least, I have some contract work back with my old team in Bing in London. Seems like I can’t escape that easily!

I’m excited about the future, and not entirely sure yet what direction this will take me in, but I know many of my friends and ex-colleagues (those groups are not mutually exclusive!) will be wondering what I’m up to. Therefore I’d thought I’d do an FAQ to try to anticipate some of the questions.

I’d also like to say thanks to everyone who’ve sent me very nice messages already - much appreciated!

Q: Why are you leaving Microsoft as an FTE?

As many of you know I live up in Northumberland in the cold, cold North East of England, and I’m trying to get a better work-life balance where I’m not working away from home in London all of the time.

To do that I’m setting up my own business again, hopefully doing some interesting and profitable things!

Q: So how come you’re back at Bing then?

Right now I’m still in the process of figuring out how I can best achieve my long term plan. So after talking with my ex-colleagues in Bing’s London office, they were kind enough to make me an offer to do some contarct work with them for a while.

After the first few weeks, I’ll probably just be in the London office 2-3 days a week, so hopefully that’ll be a better work-life balance for me.

From a work point of view, I’m really looking forward to working with everyone at Bing again, getting back to working in the same area as when I first joined the team 3 years ago.

Q. What was working at Skype like?

Different to Bing for sure – better in some ways, not as good in others. The team I was working with was a great bunch of developers from whom I learnt a lot, and I’m sure what they’re working on is going to make a huge impact on improving Skype in the long term.

Q: When are you leaving/starting?

My last day as a Microsoft employee is March 8th, and if we can sort the paperwork out I’m hoping to start my contract at Bing as soon as possible after then.

Q: What is your “startup” going to be doing?

I have lots of ideas on what I’d like to be doing, but I’m not sure about the long-term viability of any of them right now. Over the next few months I’ll be working through what I hope are the best of them in my spare time, to see if any of them get any traction and turn into something more substantial.

I’ll continue to write about what I’m doing here, so the best way to find out - if you’re interested - is to follow this blog!

N.B. This blog post has now moved to https://writingontablets.com

Posterous is Dead. Long Live Github Pages and Jekyll

Posterous finally announced their expected demise, so I thought it was a good time to change where I wanted to host this and my other blogs.

There are so many options for blogging right now, so I thought I should figure out my requirements and go from there. The main ones are:

  • Be able to completely customise the look and feel of the blog
  • Simple editing (using Markdown if possible)
  • Free hosting but can use a custom domain
  • Be very nice to use a Git check-in to publish

I thought Tumblr might be my best option - and I have moved one of my blogs there - but then thought what would be nice is an offline blog creator which I could customise to my heart’s content and spat out static HTML pages that could be hosted anywhere.

I considered writing something myself, but then discovered Jekyll, a Ruby-based system that is used by Github Pages - which would be the perfect place to host this blog.

The setup was pretty straightforward on Windows once I’d got Ruby and the Ruby Development Kit installed.

Setting up the blog was also quite simple following the usage instructions, and even better there is already migration code to pull in content from existing blogs - even Posterous ones.

It didn’t take too much work to tweak the layouts to something I’m happy with, and even though I say it myself, this blog is now looking pretty swanky (well for someone with my limited design skills!)

If you want to see how it’s done, all of the code, content and layouts can all be seen in my Github account (naturally).

I’d definitely recommend this setup for migrating your Posterous blogs - assuming you’re happy hacking about with a little bit of code.

N.B. This blog post has now moved to https://writingontablets.com

Porting old ASP/Access code to PHP/MySQL

I've been trying to rationalise my websites a bit recently, and in particular finally put into mothballs what was probably my first website.

The site was first written in about 1999(!), and some of the code hasn't changed very much since then. The only part that is still really being used is a football prediction game called "Fantasy Island" - like fantasy football but a bit crap :-)

For me this was an interesting exercise in brushing up on my extremely rusty PHP skills, learning some new things about MySQL and looking back at some very old code. In particular there are a couple of things of note ...

  1. I've learnt a lot about coding in the last 14 years, as some of the old code is pretty ropey. In particular the way I (and hopefully everybody) think more about potential security issues is definitely a good thing.
  2. PHP is surprisingly similar to ASP Classic

The 2nd point is quite interesting, in particular given the slightly dismissive attitude that I've heard about PHP sometimes from people who were quite happy to develop in a very similar way not that long ago. Clearly it is easy to write "spaghetti code" in PHP and ASP, but unstructured code isn't a feature of any language, but more a function of the developer writing the code.

You can see the results of my handywork at http://www.yeltz.co.uk/fantasyisland/, and once I've done a final tidy up and fixed any bugs found now it's live I may share the code somewhere.

There were a couple of gotchas that tripped me up as I was doing the migration that I'll share here in case someone else hits them too.

DateTime->add() is not supported in PHP 5.2

I wanted to use a DateTime object to find a day 60 days from now, and on my dev box I was running PHP 5.4, so using the add() function seemed logical.

However what I didn't realise until later was that the server I've ported the code to is only running PHP 5.2.17, and a close look at the documentation showed the add() function was only supported in 5.3.0 and above.

The solution was to use the pretty self-explanatory following code:

$twoMonthsInterval = new DateTime();
$twoMonthsInterval->modify('+60 day');

Not as clean, but it works :-)

Use TINYINT(1) for boolean fields in MySQL

I had all sorts of issues which to be honest I didn't really understand when trying to retrieve data from a table that I'd set as a BOOL field in the database.

According to the documentation it's just a synonym for a TINYINT(1) field but when fetching the info via PDO I was getting incorrect values for some reason.

Anyway, directly setting the value to TINYINT(1) and setting/getting the 0 or 1 values directly fixed all of my issues.

N.B. This blog post has now moved to https://writingontablets.com