James Munro Software Engineer

react-native-spotlight-search 0.2.0

I recently published a new version of react-native-spotlight-search. Check out the changes below:

What’s New

  • Support for the ‘keywords’ property. This allows you to improve the likelihood of your content being found by adding related keywords to the index. These keywords are not displayed to the user.

Please file any bugs or feature requests over on GitHub.

Indexing Your App Content With React Native and Spotlight Search

I wanted to improve the functionality of an app that I’m developing by allowing its content to be indexed so that it appears in the Spotlight search on iOS. The app is developed using React Native. Although there is an extremely healthy community of third-party packages for React Native, I couldn’t find one that provided the functionality I was after.

To help plug this gap in the ecosystem, I’m happy to announce that I’ve developed a new npm module for React Native that does just that: react-native-spotlight-search.

Spotlight is a feature that allows you to search for content on your iOS device. Spotlight is accessed on iOS 9 by pulling down on the home screen and searching for the desired term. The results will come from a mixture of different apps/other sources. For example, a recipe app may index all of the user’s recipes, or a mapping app might index all of the user’s favorite locations so that they can easily search for them on the device. To learn more about the technical possibilities of Spotlight, check out the technical documentation for Core Spotlight.

The currently supported Spotlight features are as follows:

  • Adding items.
  • Updating items.
  • Deleting items.
  • Register a callback to handle when a search item is tapped.
  • Limited support for thumbnail images.

Checkout a short demo of this below:

Spotlight Search

This is the first open-source project that I’ve worked on in quite some time due to other commitments, so it feels great to be able to contribute back to the community. The feature set is currently quite modest but I’ve got plans on how to develop it further in the future.

For any bug reports, questions or feature requests please drop by the GitHub project for react-native-spotlight-search and file an issue.

Club 100 2016 - Round 5, Glan-y-gors

This weekend I travelled out to the wonderful Glan y Gors (or GYG) circuit in Wales for Round 5 of the Club 100 Lightweight Sprints Championship. GYG is a fast and challenging ‘drivers’ circuit - I was looking forward to the day’s racing.

We started the day with a 1-hour test session in the morning. This proved to be a great shakedown, having not raced for a month. With dry weather I was able to set a time of 50.444 which put me 14th fastest overall, out of 34 participants. It’s quite tricky to tell how well you’re doing in in a test session as there can be a wide range of abilities and weight classes mixed into a single group. I had high hopes for the sprint races in the afternoon.

Then it rained.

Although certainly not my strongest skill, I’ve slowly been chipping away at my wet-weather lap times and also building up my confidence of kart control in the wet. Unlike other series Club 100 remain on slicks in the wet and so you need to learn to drive in slippery conditions pretty quickly! Despite my initial confidence, I didn’t qualify as well as I had hoped and slotted into the front half of the pre-B final. Initially feeling phased, I went into the first race with the intention of a top-4 finish so that I could make it onto the back of the pre-A final. Unfortunately, this was not to be as I simply could not find the pace I needed to keep up with the front of the pack and I rolled over the line in 7th place.


The B-final arrived with the opportunity to redeem myself and qualify onto the back of the A-final if I could just finish either 1st or 2nd. With this in mind I was motivated to give it everything in the race! Unfortunately, my luck for the day had run out, and I was punted off from behind, along with another driver as one of my fellow competitors out-braked himself coming down the hill into the double left-hander carousel corner. With a clear track in front of me, I used the remainder of the race time as a free practice to take some risks that I wouldn’t normally take when racing for position and improved my overall wet lap time as a result.

Although I didn’t get the results I was hoping for, I did at least get more wet weather driving experience. With little else to salvage from this weekend’s racing, I’m keen to move onto the next round at Clay Pigeon in Dorset!

Northampton Karting League 2016 - Round 1

Alongside Club 100, this year I’ve decided to enter a local 4-stroke karting league, the Northampton Karting League (NKL) which is hosted at one of my favourite karting circuits: Whilton Mill. I’ve given this a couple of attempts before since 2014 - with mixed results - but after identifying that I’d like to improve my racecraft I figured it is worth another shot. Economically, the NKL is significantly cheaper (and still well organised) than Club 100 however the karts (Honda-engined Sodi RT8’s) are nowhere as exciting to drive and the cheaper price attracts a varied range of driving abilities and standards. Still, there’s no substitute for tracktime and practicing racecraft is my main motivation (getting to race on a school night is always good fun too!).

NKL is hosted at 6pm on the first Monday of each month. Since we’re still in the winter the sun was setting by the time we got out onto circuit. The formula is a little different to Club 100: each driver gets 2 heats followed by either an A or B final, dependent on results in the heats. Driving in the dark, assisted by floodlights, is quite a different experience to driving in broad day light. The shadows play tricks with your mind and necessitates that your driving becomes more instinctive - you cannot easily spot reference points on the circuit such as patches of tarmac or tufts of grass which often aid in picking your breaking points.

There is no qualifying in the NKL - your grid position in the first heat is randomised and your subsequent grid position for the second heat is the reverse of that. This makes things quite interesting because sometimes you’ll be at the back and other times at the start. If you’re particularly unlucky you might be seeded in the middle of the grid which means starting right the middle of the pack for both heats.

Making a Move

My performance in the first heat was reasonably average and I made a great start but found myself on the receiving end of some karting banditry at Inkermans which sent me briefly off circuit and cost me a few places. I finished more or less where I started. The second heat was better, I started 6th, initially lost a couple of places and subsequently clawed them back to finish 5th, enough to qualify me onto the back of the grid in the A-final. It was soon time for the final race: I did not make a great start and and found myself running in last place, around 25th. Fortunately I was able to pull a few moves and there were several casualties of over-enthusiastic moves further up the field.

Thanks to Sławek “żużel” Piskorz Racing for the photograph!

Achievements From Round 1

  • A best laptime of 47.488 which was pretty competitive on the night.
  • Getting more accustomed to the ‘National’ layout at Whilton Mill.

Objectives For Round 2

  • Top-10 A-final qualification and finish.
  • Be more assertive on the first couple of laps as this is where I tend to lose places.

Club 100 2016 - Round 1, Buckmore Park

After waiting for what felt like forever, it was finally time for the start of the 2016 Club 100 karting championship. Now into my third season, I’ve got the hang of the basics and this year I’m focusing on refining my technical skills and getting some results. It would be around 2 years ago - almost to the day - that I began my adventure in motorsports and I was excited to see how I’ve progressed, especially having had some time to reflect over the Christmas break.

I began the day with an hour of driving tuition from Niki Richardson Driver Development who has been a great aid to my driving technique over the last year. After identifying some room for improvement my lap times began to improve and I finished the test session with a laptime of 47.227s. There was more to learn that usual as this year the kart fleet is running on Bridgestone YDS tyres which appear to have less grip than the Vega’s we were previously running. My gut feeling is that these tyres will suit my driving style better. Time will tell!


After a couple of hours waiting it was soon time to collect my number plate for the year (#24) and for my qualifying session. During the qualifying session I was lucky in finding some clear track space and was able to put in a laptime that would prove to be decent, 47.350s.

Garda Corner

Qualifying performance is possibly the biggest improvement I made last year and I’m hoping to continue this into my third year. It’s all about finding some space and not getting caught up with other competitors. I eagerly awaited the posting of the grid positions and was thrilled to find myself in 11th place in the A pre-final - my best ever qualification. This could be a chance to get my first top ten finish.

Pre A-Final

The first race went something like this: badly! I had trouble finding my starting position in the rolling grid and subsequently made a bad start 2 positions further back than I was supposed to be. I would really like to focus on improving my performance at the start of races. It’s a case of needing to stick out my elbows a bit and be more aggressive. A few laps in I was involved in a few different battles for position. The pace in the A-heats is quite a step up for me and you really have to work hard to stay in position. Unfortunately, I was a tad over-enthusiastic with my entry to turn 1 about half way through the race and span out (I’d like to blame the tyres), ultimately finishing right near the back of the pack. Despite setting a laptime of 47.131s I would start from 23rd in the A-final: this year your place in the final is derived from your finishing position in the previous race, rather than the laptime you set.


By the time of the A-final the sun was setting and it was time to swap over to a clear visor. I was also feeling pretty physically fatigued at this stage from the day’s driving. I started the race in 23rd and enjoyed some close battles with the other drivers around me. I passed several people buried in tyre walls, one of them quite seriously, at various stages during the race. I rolled over the line in 15th position - my best ever Club 100 result - despite being several tenths off my pace in the previous race.

Cafe Corner

Although a mixed bag, the overall take-home feeling for this round 1 has been a positive one. I’m making incremental improvements across a varied range of skills and I’m excited to see how far I can push myself in 2016.

Achievements From Round 1

Although my individual race results were not that impressive I’m pleased to have achieved the following during round 1:

  • My best ever qualification.
  • My best ever overall race finish.
  • Improved my laptimes since my last visit to Buckmore Park.

Objectives For Round 2

With round 1 behind me I’m looking forward to round 2 at Rye House. My objectives for round 2 are:

  • To continue improving my personal fitness.
  • Another top 15 pre-A final qualification.
  • Improve my start of race performance (go forwards not backwards!).

26 days to go until round 2!