Brave Location Mobile Apps and Web Solutions

Yeltzland - Stuff about Halesowen Town


Everything you wanted to know about Halesowen Town FC - the mighty Yeltz - in one simple app:

No original content, but having everything in one place makes it easier for you to find

The app is an Open Source project, so if you're interested in the code it's available on GitHub - iOS and Android repositories.

Download on the App Store Get it on Google Play

Blog Posts about Yeltzland - Stuff about Halesowen Town:

Building an Alexa Skill

I recently bought an Amazon Echo, which I absolutely love. It’s great in the kitchen as a hands-free music player, as the speaker is really good, and has replaced the slightly unreliable Siri completely for setting timers when cooking.

Obviously I wanted to develop my own Alexa skill, so I’ve built one to tell me about the latest Halesowen Town scores and fixtures information. Right now there’s almost certainly an audience of one for it, but it makes me very happy!

Here’s a video showing the exciting things it does …

Technically the easiest way to write a skill is on AWS Lambda, Amazon’s on-demand compute engine. Alexa skills can run on Lambda with minimal setup, and looks a lot easier than running code on your own server.

The Alexa Skills SDK explains pretty well how to get set up - not always a given on Amazon’s platforms in my experience - so I won’t repeat anything here that isn’t covered in detail in the documentation.

In essense, to get your skill running you have to complete the following tasks:

  1. Add a list of intents you want your skill to answer
    • You can add custom content slots for known lists of names (think Enum) e.g. I have a list of teams in Halesowen’s league to match against
  2. Add sample phrases which will match to each of your intents
    • The content slots are used here e.g “FixtureIntent when is the game against {Team}”
  3. Point to where the skill code runs
    • Trivial to do if you are using AWS Lambda, but you can use your own https server with a bit more effort
  4. Upload your skill code in your AWS Lambda functions
    • The code can be written in Python, Java or Javascript/NodeJS - I chose the latter as I prefer the easy extensibility.

The example skill code for Lambda is pretty easy to understand and adapt as necessary. Note you can either update the code directly in the browser-based Lambda console, or upload a ZIP file containing your code. The latter is much preferable if you have any node modules you want to include in your solution.

My code simply loads existing JSON data from my server used in the iPhone/Android apps for the fixtures, results and latest score, parses it appropriately based on the user’s intent, and then returns a string which the Echo reads back to the user.

The voice recognition accuracy isn’t too bad - I suspect it struggles because of the slightly obscure names of some of the teams in the Northern Premier League!

All in all, it was pretty easy to knock together something based on existing data, and it’s really cool to be able to ask Alexa what the latest Halesowen score is. I look forward to be able to do this on Siri in about 3 years time at Apple’s currently glacial pace of opening up their systems.

The code is all available on Github at which hopefully makes things a little clearer if you want to dive in and take a look.

Getting Ready For iOS 10 Widgets

It’s summer, which means updating all the Brave Location apps for the new version of iOS.

Thankfully this year the UI changes weren’t too big, and the real work was because of how the Today widgets are changed in iOS 10.

In iOS 9, the widgets are on a dark background, so it makes sense for the text to be generally white. Here’s how my stunning well-designed widgets look in the Today section on my iPad running iOS9 …

iOS9 Today widget

Now in iOS 10, the widgets are much more accessible - can be accessed directly by right swiping even on the lock screen - but the design has also fundamentally changed. The background is now a light, semi-transparent color by default, on which obviously the white text of the existing widget design is basically unreadable.

Now I didn’t want to have an iOS10 only release ready, as all of my apps currently target iOS 9.0 and above and I want to keep it that way for a while.

So what I do at runtime is detect whether we are iOS 10.0 or above by the following code snippet:

let ios10AndAbove:Bool = NSProcessInfo.processInfo().isOperatingSystemAtLeastVersion( NSOperatingSystemVersion(majorVersion: 10, minorVersion: 0, patchVersion: 0) )

I can then set the background and text colors of the widgets to appropriate for iOS 10 when necessary, buy keep the “traditional” look and feel on what will soon be legacy versions.

Quite happy with the way it’s turned out, even though I say it myself.

iOS10 Today widget

Updates are should all be in the App Store shortly (in case anyone else is running the iOS10 beta), and for everyone else in September I assume!

Yeltzland Android app released

By “popular demand”, I’ve now made an Android version of my Yeltzland app.

Just like the iOS version, the app just makes it easy to read everything about the mighty Halesowen Town FC (Forum/Official site/Yeltz TV/Twitter/…) in one place rather than have to click around different places. There is no new content you can’t get elsewhere.

It’s my first Android app that made it as far as the Google Play Store, and it was interesting to port a relatively simple native iOS app over to Android - but I’ll leave my more technical observations to another post.

The first version of the app is available on the Google Play Store now.

Azure vs Firebase for iOS push notifications

I wanted to add push notifications for my Yeltzland app, an interesting task which took longer than expected to complete.

What I wanted to do was to push notifications to the app during game time, which copies tweets from the club’s official account as notifications. This means I can get goal updates etc. without having to turn on notifications from the account in the main Twitter app (which can get a little tiresome!)

The server component part was pretty easy, as I already have a data feed of the team’s fixture list, so I knocked together a quick NodeJS script run in a corn job to use that plus the Twitter feed to generate the notifications.

However I didn’t want to build a full web app to manage user registrations myself just to do this, so it made sense to use an “off the shelf” notification hub instead.


Firebase seemed a good choice as a notification hub to try first, especially since at Google I/O they’d just done a major release to pull many disparate developer tools under the Firebase brand.

Firebase offers unlimited notifications, plus support for both Android and iOS, and it looked easy to set up.

In fact I did get it working pretty quickly, but during testing it seemed really unreliable. Notifications wouldn’t get delivered, or spasmodically, and I sepnt a couple of days trying to figure out what was going wrong without much success.

Now it could be that the iOS support has issues (my guess is the service has been mainly Android only before), or more likely I was doing something wrong, but in the end I gave up very frustrated.


I thought I’d give Azure a go instead, and it was really easy to setup a working Notification Hub without much effort at all.

Out of the box, the notifications seem much more reliable, and I’m really happy with the service so far.

I really wish I’d have started with Azure rather than wasting 2 days wrestling with Firebase.

One minor thing I did have to do was to have separate hubs for “sandbox” and “production” modes, which wasn’t clear from the Azure portal interface.


Your mileage may vary, but I found Azure a much more reliable notification hub for iOS and the client-side code was much simpler too.

I’d definitely recommend checking it out for small projects, although for heavy usage there is a cost involved compared to the unlimited free usage Firebase offers.

I made a Yeltzland iPhone/iPad app

So I made a Yeltzland app for iPhones and iPads.

I really just made it for myself, to make it easy to read everything about the mighty Halesowen Town FC (Forum/Official site/Yeltz TV/Twitter/…) in one place rather than have to click around different places. There is no new content you can’t get elsewhere. I am lazy.

Anyway it turned out OK so I thought I’d stick it on the App Store so other people can use it if they want.

You can read a bit about it/install it on the App Store

Before you ask, it isn’t available for Android right now I’m afraid, and I have no immediate plans to write an Android version. I may change my mind of course.