Skip to main content

Transforming a blog

· 6 min read

One of the trickiest things when re-imaging your view of the world or changing how you interact with it, is how you present yourself.
Do you continue as you were or try something new, new is always scary and in the technical world it can also include some unintended consequences.

In starting anew, I chose to break the shackles of a blogging platform (WordPress in my case) and transformed to a new Ghost blog hosted on Azure.  This has not come without significant peril and confusion, mainly because all information about hosting ghost yourself is several months/years out of date due to changes in the Ghost platform and also on Azure.

Sure, I could have gone for a hosted blog, I certainly don’t mind paying for it, but where is the challenge in that :D.


TL;DR​

  • Exporting from WordPress to Ghost is easy, but you need to find an alternate way to download the backup.
  • Importing your WordPress backup in to Ghost will take a lot of trial and error, mainly to breakup the backup in to smaller backup files for import.
  • Getting Ghost self-hosted is no simple task, but there it help. If you’re not sure, the only real option is to pay for a hosted Ghost.

The State of Azure​

Azure used to have a quite rounded set of free features, however overtime this has reduced to the point where it only supports static pages, simple web apps and PWA’s and more critically does not support custom domains.  Thankfully though, HTTPS comes as standard (once you turn it on) and is still free,

But given having a “azurewebsites.net” url does not scream a “professional” blog, I chose to upgrade to the basic tier which gives you a little more freedom.  It’s not quite “free” but the cost is fairly inconsequential and comes with a host of nice features.


The state of Ghost​

Ghost has upgraded and added a tone of features in recent years, however, this has come at a cost of self=hosting.  Not to say you cannot still host it yourself with the latest and greatest, but it is no longer trivial.
For myself, I have stayed a version behind, as it is still possible to host a Ghost blog on Azure with Versions 2 & 3, although as you’ll see, not quite as easily as it used to be (Azure used to have a Ghost app deployment included in the Portal, but no longer)

I’m keeping an eye on a few great Microsoft MVP’s who are still tinkering, in the hopes one of them can unlock the gateway to V4.  Another option would be to switch to using containers instead of hosting the website, but I’m not quite ready to make the jump yet.

One good thing is that once your have got your content into Ghost, it is a lot easier to transfer it to another Ghost site.


Migrating from WordPress to Ghost​

Now here is where the fun begins.
Ghost do provide a handy plug-in for exporting all your WordPress articles (only posts and pages are supported, forums and other features are not, so if you want to keep them you will need other services to export/host them).  You will have to convert any Categories you have setup to tags, as Ghost only supports tags, but again there are tools for that (but you will have some clean up tasks later).

Now, here is where the fun begins, WordPress will create your exported backup, however, you will then likely find your current host does not support downloading such a large file over the web and sadly instead of a helpful message, you will likely just encounter a “server error”.  This left me scratching my head for quite a while to figure out what is going on and it was only when I tried to backup my site to host locally, did I find the mythical ZIP file backup on the server ready for use.

Hidden in the plugins folder in the WordPress site’s files, the ZIP file was prepared and ready for use, but as you will find, this is only the beginning of the journey.


Importing WordPress in to Ghost​

Once you have your WordPress backup file, you then hit the reverse problem  when trying to import the backup file into your Ghost site, Ghost it seems has a 20mb’ish limit on import files, but all is not lost. (My backup was over 500mb, mostly images)

If you extract the zip file, you can break up the files and create several ZIP backups for imports, mostly images and other “stuff”.  Import the images first and leave the Jason backup file till last.  Once all your images are imported, only then import the Json text content which will automagically switch to using your imported images locally.

As a tip, WordPress auto-generates several scaled images for every image on the site, so go through your unzipped backup files and remove all the scaled images, leaving only the base image. Ghost does a much better job of handling scaling for images anyway.


The final round-up​

You will no doubt have several clean up tasks post import, ranging from:

  • removing duplicate tags
  • renaming unrecognized tags (most I found were also duplicates)
  • cleaning up unwanted posts
  • Theming, styling and Adonis
  • A million other tasks to configure ghost

Your last steps will then be to start finding new paths to get content in to your new site, from Writing in Ghost, to using one of the many integrations (I tried the integration with "write.as" but ended up manually migrating the post here).

I wish you well on your new blogging adventure if, like me, you have decided to make a change.

And so the journey continues

· 4 min read
Insert coffee to continue gif

I've always been a steadfast supporter of helping to educate (and be taught by) the developer community, wherever I can on whichever subject, software or service I am currently embroiled in. It was always my mantra, even from the very early days, some 20 years back.

However, in the latter years, although I have been "out there", supporting who I can and wherever they are, I have not been as forthcoming with my blogging efforts.  There are numerous reasons for this, trials, tribulations and for those who know me best, some hardships and the eternal battle with impostor syndrome.

But as ever, to grow we must push on and keep doing the small things which help keep us on the straight and narrow, all the while busting the door open to new opptunities. Confused, I hope so, as I am usually in a constant state of bewilderment, until I find that one article, document or person that sets the record straight.


New Adventures​

Part of the longing to get back in to blogging/vlogging/etc has been the start of a new career with an absolutely awesome team at xRealityLabs, headed by the totally amazing boss that is Gareth James. (If you have not had the chance to meet him yet, you probably should!)

Asset 2Logo.png
xRealityLabs - Mixed Reality Research and investment

Finally I can say the training wheels are off and I can fly free to be the developer I need to be, both by day and night, no more splitting myself in two in order to achieve my lofty personal goals.


New Stories (and some old ones too)​

This being the restart/reimaging of my blogging adventures, I'll be kicking off with some of the useful things I have been digging into for the past few months, all with the aim to help developers new and old with their game development adventures (although some tips are good for all).

Here is a sneak peek and some of the things to come:

  • Automation for Unity Builds, large and small
  • Building projects using the Unity Package Manager, tips'n'tricks
  • More MonoGame fun (because XNA is in my soul)
  • XRTK news, tips and tutorials (because XR is our future)
  • Some of the recent Unity UI Extensions updates and features

I might even venture towards how this new Ghost blog was setup, except that this adventure is still continuing, expect some bumps along the road as I figure this one out.


Let the games begin​

Darth Maul says "Now, let us begin" :D

Time to get this party started, all those in favour say "aye".

(Written on an iPad, using Ghost, Hosted on Azure and some rubber bands for good measure.  Imagine me saying that a year ago)

And to those who are still listening and have followed my decline over the years, Thanks for sticking with me as I turn this ship back around on to a new course.

Building and testing "Smarter" with Unity

· 7 min read

A walk-though guide to automating your Unity builds for Free (or paid) to help you get working smarter and not harder when building for Windows, iOS, Android or whichever platform you are building for.

Monty Python and the holy grail nights "Run away!!"
Everyone's first reaction to the mention of Automation

Automation it would seem, is one of those big unsurmountable goals for small projects, considered to be something only the big software houses do and seen as the holy grail (see what I did there) of software maintenance.  However, is very accessible to projects large and small, providing untold riches for those brave enough to stick their toe in to.

In this series of articles I will go through several of the quick-fire options for getting your Unity project automated for builds, tests and all manner of helpful tricks.

But what exactly is automation?​

Joey from Friends joining in a joke he obviously does not get and frowns

Have you ever been sat at your machine waiting for your Unity build to finish, unable to even start tinker with the next big thing to add to your project because Unity is locked up and working, or wondering if the next change you make will brake your fantastic hoop throwing technique and crash your game?  Well, you are not alone.

The short answer, Automation provides a way to offload your builds to someone else to handle while you get back to coding.  You get your project to the point where you need to test it, preferably on a device and then pass it on to someone else to do the donkey work of building it. (Even building MULTIPLE platforms at once)

A flow diagram showing a unity project, checked in to source control to be picked up by a cloud agent to be processed and built for several platforms
Taking your project through source control and having a cloud build process turn it in to packages

The slightly longer answer is that automation provides several mission critical operations that are "Automated" on a server, such as:

  • A way to add reliability to your project, to add as many checks and measures as you need to ensure your build it fit for purpose.
  • Gives you the ability to build / test and deploy many platforms from a single process.
  • If you wish, you can even automate publishing of your project to test platforms (e.g. Testflight or Appcenter) or even direct to stores.
  • Add reporting, monitoring and logs, as well as operational dashboards as to the health of your project.

While all of these things are possible, you only need implement as much as you need and then just keep adding to it over time.

In short, for even the smallest projects, Automation can be a life-saver, but you do need to invest a little time (and sweat) in to getting it set up.

How do you go about setting up automation? Is it expensive?​

Little girl reading a bill with a headline "when you cannot afford anything"

The answer, as usual in these cases is "It depends".  If you want speed and lots of features, then you could end up with a budget for maintaining your Automation services.  HOWEVER!, there are also many FREE services available and it is up to you whether you ramp up over time.

Here are some of the providers of backend services to support your Automation:

  • GitHub Tasks
    Built directly in to GitHub and offers a free tier of automation with many different options. Offers paid tiers for intensive or long running operations.
  • Azure DevOps
    Cloud hosted automation with the ability to "plug-into" most source control systems and offers extensive options for integration. Includes a Free tier with many scale out/up options.
  • Jenkins
    Opensource automation software for hosting on your own hardware with a vast community of supporting developers.
  • Bitbucket Pipelines
    Similar to GitHub tasks and focused on Atlassian services.
What about Unity Cloud Build?
At the time of writing, Unity cloud build, while useful is still very limited on platforms and the amount of testing, integrations available.  But I will update as it matures.

The deployment of each of the offerings can be on your (or another) PC, Cloud hosted or anywhere in-between, depending on how much you want to get out of the automation. About the only cost which is absolute, is how much time you want to invest in setting everything up and maintaining your automation services.

How long is this going to take me?​

Man running out of time within a clock

Setting up automation can take anywhere from a few hours to a couple of days, depending on how far you want to take it.

  • Setting up a build for a single platform - about an hour
  • Setting up builds for multiple platforms on the same box (e.g. Windows Or Mac) - A couple of hours
  • Setting up builds for multiple platforms on several boxes - about a day
  • Creating automated tests and including them in your pipeline - a day to learn, minutes to implement
  • Integrating with Build/Testing deployment systems (Testflight/AppCenter) - about a week, give or take.
  • Time saved from not having to wait for builds or figuring out "what wen't wrong" - Between 5 to 20 cups of coffee a day.

It is completely up to you how much you invest, but for each investment the return (on average) is more than 10 times what you put in, in some cases MORE, as you can continue to work while the automation/builds are running.

What is next?​

Now that I have hopefully whetted your appetite, here is what you can expect over the next few articles:

  • Entry level introduction to using Azure DevOps
  • Setting up GitHub tasks for your Unity project
  • Advanced automation with Azure DevOps
  • Tips'n'tricks for Automation

(I will add the direct links to each article as they turn up)

I hope you find these articles valuable, as they have done for me in setting this up far and wide now, and now, on with the show.

John Cleese, Monty Python, "Please go on, this is the least fascinating conversation I have ever had"

I apologize in advance for all the Monty Python references, I've been locked away in a box trying not to be seen for what feels like ages......

MonoGame for Mac on Rails

· 4 min read

There are those who either do not like or prefer not to use big heavy-hitting coding IDE's, prefer the raw metal of cutting their teeth on code using nothing but their wits (and a good spellchecker), thanks to MonoGame 3.8's new .NET Core delivery approach they can.

MonoGame 3.8 Mac CLI

Thanks to the aforementioned Command-line/Terminal (CLI) approach mentioned in my previous article, developers can (if they choose) use either a slimline code editing tool such as VSCode, Sublime, Rider or even just a trusty command-line/terminal window to build great games.

Sure, you might miss some of the big-hitting features the larger packages might offer, but if you are starved for disk space, bandwidth or simply like your meat raw then the slimline editor is much more attractive option.

Getting started with CLI for MAC

The MonoGame team took particular interest in ensuring everything you need to know about setting up MonoGame 3.8 on your Mac for CLI was all up to scratch and you kind find the article (as well as others) here:

Setting up your development environment for macOS

If you scroll past the Visual Studio for Mac sections you will find the instructions for:

  1. Getting the .NET Core project templates for MonoGame
  2. Registering the MGCB Content editor GUI
  3. Setting up the Wine effect compilation pipeline
    (Needed for compiling shaders on Mac for all platforms)
  4. Fin

The process is fairly easy and shouldn't take you more than one or two cups of coffee to get through (depending on your internet connection)

If you prefer, I have uploaded a video walking through the process here:

Setting up your Mac for MonoGame CLI

Additional Reading

A couple of extra tips when you are entering the world of MonoGame 3.8 to be aware of, are the following:

So why are you still here reading this article? Get out there and get coding your game and if you are stuck, check in to the MonoGame discord and start chatting!

MonoGame blasts into the future with DotNet core

· 10 min read

MonoGame is certainly one of those frameworks where if you take your eye off it for a little while, it comes back to slap you in the face and remind you why it is still relevant.
With the recent MonoGame 3.8 release, this is even more true than ever as we say goodbye to the old MSI approach for installing one of the best open-source game frameworks out there.

Can you improve children's lives through games? - Medium

· One min read

I have been working long and hard on one of the most beneficial projects of my life. I have worked in healthcare for the past 2 decades professionally with healthcare software, ever since my Son was born with an untreatable genetic condition. I have wanted to “Pay forward” to all those clinical staff who helped us through our early years by creating better software to enable them to care more (and type less).