Jahed Ahmed Software, Games

FrontierNav Report: December 2018

Progress Report

Changes in December


Preview showing the new entity pages and navigation across different guides.


  • Added standalone entity pages.
    • This lets you search for an entity and go to the guide you need rather than having to pick a guide first (see video).
  • Added category listing for entities.
    • This lets you find an entities by category if you don't have a specific thing to search.
  • Continued making the application more modular.
    • Pretty much done now, a few small hairs left.
  • Various UX improvements
    • More preloading of scripts to reduce loading points.
    • Better indicators when certain details are linked to other pages.
    • Navigate from one guide to another. For example, you can go from an entity page to the affinity chart to the map (see video).

Xenoblade Chronicles 2

  • Added Enemy Drops
    • Includes things like accessories, core crystals, aux cores, etc.
  • Improved Affinity Charts
    • The icons and mugshots are now best quality.
    • Rewards marked as complete now appear as such.

Full changelog on GitHub.

Read more

FrontierNav Report: November 2018

Progress Report

Changes in November

Now that FrontierNav is open source, it's a lot easier to share changes for the month. You can find a list of changes on GitHub.

However, it's a bit low-level so to summarise:

Architecture Improvements

  • Continued tidying up the code so that it's easier for others to understand.
  • Made some rendering performance improvements
  • Looked into Dat / Beaker as a way to serve FrontierNav without a central server (read below).

Xenoblade 2

  • Improved enemy map markers and spawn details

Read more

FrontierNav Report: October 2018

Progress Report

Changes in October

FrontierNav is now open source! I've spent most of the month planning this switch over and thinking about what it means for the project going ahead.

By virtue of being open source, I'll be more open about priorities and plans. There's an Issue Tracker for feature requests, planned changes and bug reports. I've also written some documentation for people to get started so that they can make their own code contributions.

You can find the code repository on GitHub.

Read more

FrontierNav Report: June 2018

Progress Report

Changes in June

For Xenoblade 2's map, legend toggles have been implemented, allowing you to choose which map markers to show. However as the data bundle now contains substantially more data -- roughly doubled by adding all enemy spawn points -- the current approach to data management may not be feasible. So I've spent some time looking into alternative approaches.

Read more

Always Log JSON

After years of writing log lines and trying to find a perfect format, I've come to a conclusion: Always log JSON.

Logging to JSON makes your code read more consistently, you save time thinking about how to log your message and it allow you to separate concerns between logging data from processing it for various use cases like debugging, generating reports and performance.

I'll be using JavaScript as an example here, but my opinions apply to all languages.

Read more

FrontierNav Report: May 2018

Progress Report

Changes in May

Following on from April, I've been working on the Xenoblade 2 Map. All the Collectible, Location and Salvage points have been imported.

Xenoblade 2 Maps

You can view the maps here.

The relationships between Collection Points, Collectibles, Blades, Field Skills, Regions, etc. are all linked up so you can easily navigate between them and find related pieces of information.

Performance Improvements

It's probably not very noticeable on a desktop computer, but I've optimised a lot of the rendering logic throughout the app. There were a lot of unnecessary calculations going on when navigating around, causing a slightly longer wait time. As more data is imported, it gets more noticeable.

Things should feel a lot smoother now. There's more improvements to come in the same vein.

Next Up

I've started importing Enemy locations to the Xenoblade 2 Maps. Before I push that out though, I'll need to introduce a Legend toggle of some sort to reduce the types of markers on screen.

It seems pretty straight forward at first, but there's a lot of decisions to make. Things like:

  • What markers to show by default.
  • What to show when a user comes from an external link.
  • Whether to persist visible markers so that link sharing is consistent between users.
  • The most convenient place to put the toggle menu for desktop and mobile interfaces.

As with everything, I'll decide on a few things and improve it as I go.

FrontierNav Report: April 2018

Progress Report

Changes in April

April saw a steady progress towards open sourcing FrontierNav and the gradual introduction of collaborative tooling. The interface has been tidied up too: consistent colours, cleaner layout, better navigation. On top of that, Xenoblade 2's map is almost ready!

It's nearing the end of May now but it's worth mentioning May's update will come in June as usual with Progress Reports. This update was delayed by some weeks.

Xenoblade 2 Maps

The data for the maps is available now. It's just a matter of linking it all up, making sense of it and making it presentable. Can't wait!

Read more

Enforcing Retention Policies on AWS S3

With the recent rush for GDPR compliance, services are becoming more aware of the amount of data they hold and if it's really necessary to have all of it.

Application logs contain a variety of historical data coming from both users and third-parties, making it extremely useful when running reports and to monitor production behaviour. However, after a certain period, the burden of responsibility will begin to outweigh the usefulness of the data. Once that point is reached, it's best to shed that responsibility.

A common way to store logs is to put them on AWS S3. But, without the proper configuration, those logs will remain there indefinitely. You could manually delete objects or set an expiry when they're uploaded but there's an even more convenient solution built into S3: Lifecycle Rules.

At Unruly we use Terraform to provision our AWS resources. So, I'll be showing how you can do the same to enforce your retention policies. Before continuing, you'll need to familiarise yourself with Terraform's basics.

Read more

DNS-over-HTTPS in Firefox 60 and beyond

Firefox 60 recently released and with it came full support for DNS-over-HTTPS (DOH). By default, DOH is turned off but you can enable it quite easily.

  • Go to about:config
  • Search for network.trr
  • Set network.trr.mode to 2 (i.e. try DNS-over-HTTPS first and fallback on failure)
  • Set network.trr.uri to https://cloudflare-dns.com/dns-query or any other provider you trust.


Apparently, the current implementation may cause Firefox 60 to crash. This has been fixed in Firefox 61 which will release in June 2018. So if you encounter any crashes, set network.trr.mode back to 0 (i.e. off).