Brave Location Mobile Apps and Web Solutions

Planning about Planning, and Planning

Been a reasonably slow start to the year of code, mainly because I've been in the US for the day job. However the first couple of weeks have been reasonably productive, mainly in me figuring out the best way forward.

First of all I refactored the Brave Location website a little, to make it look hopefully a little more professional and clarify what Brave Location is all about.

For the site I'm using Twitter's Bootstrap framework, which I'm very happy with except thatit isn't particularly adaptive to mobile browsers. I'm considering trying out Skeleton at some point to improve the experience for mobile users, but think I've spent enough time on it right now.

However my main progress has been figuring out how (or even if!) I can achieve my goal of shipping something every month.

I'm a reasonably big proponent of agile software development processes, having followed them in varying degrees of militancy in the most of the teams I've worked on in the last few years. However, I'm going to follow something that sounds more like a waterfall approach in that I'm going to have 4 weekly sprints, and have the following milestones/checkpoints:

  • Week One: Planning and Prototyping
  • Week Two: Main development
  • Week Three: Stabilisation/Testing
  • Week Four: Release/Deployment

My rationale for doing it this way is simple - I need a clear goal every week to inspire me to press on with my side projects after a hard day at work.

Now obviously in a team of one I don't think it really matters much what development process I follow, as most methods are designed to maximise clear communication between the development team and the business, and to extract maximum value for the business by focusing on the most important work that can be done in a short period. With me being all of the product owner, scrum master and development team I would hope communication won't be a problem.

Anyway, despite all this planning about planning, what I have been doing so far in month one is working on v3.0 of my Bedside Clock Windows Phone app. It may be slightly against the spirit of the "ship every month", but it's a good way for me to get into the swing of things. I've completed most of the dev work except a few new ideas and bug fixes inspired by being in a different time zone last week, so hopefully it will be ready to ship by the end of next week.

My other pledge is to blog about my progress at least once a week, so details of what the third and hopefully final version of the app will have to wait until next week.

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

2012 - Year of Code (and Shipping!)

So this is the plan.

I was inspired during my personal Something New Every Day project to ship a new piece of software every month for a whole year.

I really got the idea from hearing about the Dollar App project, which is essentially the same idea, although from their website it's not entirely clear how well they did.

The reason I'm doing this is that like many people I have lots of ideas for apps to build, but having a day job means it's often hard find the incentive to do other things in my spare time. I figure if I publically commit to doing something it's more likely I might actually follow through on it.

It would be great if something good comes out of the project. I'd be happy if just one app is reasonably successful, and who knows if that will happen, but the only way to find out is to give it a go!

I'm not going to restrict myself in anyway on what I develop, but my main interests are in location-based software, Windows Phone 7, Facebook apps and Windows 8, so almost certainly the apps will be some combination of one or more of those areas.

I'll also try to post regular updates on this blog, both on what I (hopefully) ship and what I learn along the way. You can also follow along on Twitter (@bravelocation) and I may get around to setting up a Facebook page too.

Here we go....

John

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

Changing the type of a Visual Studio project

Originally posted on my old MSDN blog

The reason I’m blogging about this is that I was trying to do this the other day and I struggled to find the relevant information from ALL of the major search engines – including the one I work on. Now it could be that I was using the wrong search terms, but I wanted to capture the solution just in case I (or someone else) needs to do the same.

My problem was this. We were upgrading some Visual Studio project files from 2008 to 2010, although we wanted them to continue to use the 3.5 .Net runtime. This wasn’t a problem and all went pretty smoothly, except for one project that contained some NUnit unit tests which insisted it could now only build to 4.0.

After a bit of pondering, I finally realised what had happened. Initially the project was a Visual Studio test project before we’d switched to NUnit, but because it was now an upgraded “test project” it had also be compiled against the presumably updated test functionality in VS2010/.Net 4.0.

So the solution should be simple right? Just change the project type to be a “regular” project that compiles to a DLL and everything will be OK? Well yes, but as far as I could see there was no obvious way in the project settings in Visual Studio to fix this. Now it could be that I’m stupid - please let me know if I am! - but I had to resort to hacking the XML in the project file itself.

Unfortunately the project types are stored in the XML as GUIDs. Why? Very hard to say. However after much searching finally I found this very useful page which had a list of project type GUIDs that I needed. A big thank you to the author of that page - Carlos J. Quintero! I changed the GUID and was now allowed to compile to the runtime I wanted. Job done.

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

An IE8 Accelerator for sharing on Posterous

Originally posted on my old MSDN blog

I've been working on my friend Josie's website and was looking for a simple solution for her to be able to post news, updates etc. without too much technical knowledge.

After looking around a loads of different blogging sites, software and stuff somewhere in between I stumbled upon Posterous. You can read all about it from their FAQ but it's simplicity really is a thing of beauty.

Simply send an email to a special email address and it will get posted automatically to the blog. Attached images and videos can automatically get converted and embedded, and it has a host of Autopost features which let you forward details of new items on to Twitter, Facebook, Flickr,...

You can see the results for yourself and some of Josie's beautiful pictures at http://josiemccoy.posterous.com

Anyway, I thought it would be a good idea to be able to easily share information on Posterous using an IE8 Accelerator, and not finding one already at http://ieaddons.com I thought I’d knock one up myself.

Building the Accelerator

Accelerators are simply XML files containing descriptions of the services they offer – the MSDN documentation at http://msdn.microsoft.com/en-us/library/cc289775(VS.85).aspx is pretty straightforward to follow.

It was then simply a question of matching the Posterous variables on their “share” page documented at http://posterous.com/help/waystoshare to the Accelerator variables, which resulted in the following XML file.

 

<;?xml version="1.0" encoding="UTF-8"?>
<os:openServiceDescription xmlns:os="http://www.microsoft.com/schemas/openservicedescription/1.0">
<os:homepageUrl>http://www.posterous.com</os:homepageUrl>
<os:display>
<os:name>Share on Posterous</os:name>
<os:icon>http://www.posterous.com/favicon.ico</os:icon>
<os:description>Share on Posterous</os:description>
</os:display>
<os:activity category="Share">
<os:activityAction context="document">
<os:execute action="http://posterous.com/share" method="get">
<os:parameter name="linkto" value="{documentUrl}" type="text" />
<os:parameter name="title" value="{documentTitle}" type="text" />
</os:execute>
</os:activityAction>
<os:activityAction context="selection">
<os:execute action="http://posterous.com/share" method="get">
<os:parameter name="linkto" value="{documentUrl}" type="text" />
<os:parameter name="title" value="{documentTitle}" type="text" />
<os:parameter name="selection" value="{selection}" type="text" />
</os:execute>
</os:activityAction>
<os:activityAction context="link">
<os:execute action="http://posterous.com/share" method="get">
<os:parameter name="linkto" value="{link}" type="text" />
<os:parameter name="title" value="{linkText}" type="text" />
</os:execute>
</os:activityAction>
</os:activity>
</os:openServiceDescription>

Installing the Accelerator

To allow a user to install the accelerator, you simply add a JavaScript link as documented at http://msdn.microsoft.com/en-us/library/cc197034(VS.85).aspx

window.external.AddService(URL)

I’ve uploaded my Accelerator to the IE Addons Gallery for people to use but at the time of writing it’s being reviewed by the IE team (it’s only been a hour and it is Sunday!). However if you want to try it yourself, I’ve made the JavaScript link to my copy of the XML file here.

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

Experiments with my Garmin GPS and Windows Live Maps

Originally posted on my old MSDN blog

I love my Garmin 275 nüvi! I’ve always put off buying a SatNav as it somehow seems a sign of weakness to not know where you are, but now I have one I wouldn’t be without it.

What I also like is the integration with Windows Live Maps, in particular the way you can save your collections as Favorites on your device. This makes it trivially easy to find where you’re going to on the site beforehand and then download the location to the GPS.

Communication with the device is handled by a browser plug-in provided by Garmin which can be downloaded from http://www8.garmin.com/products/communicator/

Once the plug-in is installed and the Garmin is connected, then saving a collection to the GPS is as easy as going to the Actions->Send To->GPS menu in the Collections window

The Garmin Communicator Plugin API is available for use on your own website – full details can be found at http://developer.garmin.com/web-device/garmin-communicator-plugin/

There is a great demo page at http://developer.garmin.com/web/communicator-api/apidemo/garminDeviceControlDemo.html which shows all the functionality available via the plug-in, including reading and writing the saved points of interest, and also the tracks of previous journeys made with the GPS.

This is all good stuff, but all the example code uses Google Maps so I thought it might be interesting to adapt the code to get it to work with Windows Live Maps instead.

You can see the results of my experiments on my website at http://www.bravelocation.com/locationdemo and you can see below a screenshot of the page showing my journey home from my office in building 109 in Redmond back to the hotel I’m staying in in Bellevue:

The code is hopefully reasonably understandable and is fairly closely based on the sample Garmin code so I won’t go into too many details here, but here are some of the highlights…

    • There are various issues with the current version of Windows Live Maps in IE8 Beta 1, so you need to run the code in compatibility mode. Rather than expecting the user to know this, I now realise you can force IE into IE7 mode by adding the header
<meta http-equiv="X-UA-Compatible" content="IE=7" />

to the page.

  • When creating a VELatLong object, you need to ensure the latitude and longitude parameters are floats, so I wrapped the parameters in the JavaScript parseFloat() function
  • My only real addition to the Garmin code was to add a “last known location” function to the code. All this does is:
    • Loop through all of the track data on the device
    • Find the track with the latest end date
    • Get the last valid sample location of the latest track
  • I’m only currently using that last known location in the UI, but it won’t take much work to be able to hook this up to be saved at FireEagle – watch this space!

If you’re so inclined, please feel free to use and extend this code however you wish. Let me know if you do, or if you find any bugs!

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