Jamie Balfour

Welcome to my personal website.

Find out more about me, my personal projects, reviews, courses and much more here.

Jamie Balfour'sPersonal blog

Jamie Balfour'sPersonal blog

Simply put, I've got a new job at a place I have wanted to work since first working there in 2016! 

Continuing as a teacher or going back to the industry has been something I have thought about in the past but I have always come back to it because teaching is too darn enjoyable! Put it this way, I get real job satisfaction from what I do.

This is actually the second Tuesday in a row that I've had some good news! Last Tuesday I was celebrating passing my driving test and now it's a new job!

Anyway, since starting teaching back in 2015 and qualifying as a teacher in 2019, I have wanted to work at the school I now have a position at! Where I am at present has been great and I know I've left an impact on the school so I'm hoping to bring some of that enthusiasm and my skills to my new school! 

Over the next few weeks, I will be making big changes to my house. The first of those has already started - moving all of my WiFi smart stuff to Zigbee. It's an expensive job since I've got a lot of WiFi stuff but it's just not reliable enough. This has begun with smart plugs, which even though I bought my last WiFi power strip just two months ago, will eventually be replaced by Zigbee plugs for reliability. I've also begun switching out my dumb light switches with Zigbee switches and removing smart bulbs - the switches are much easier to use and have a backup option.

Another major change I'm making is moving from having plug sockets occupied by smart devices and I'm moving more of these to devices that can be powered by Ethernet using PoE.

And, I'm now in the process of upgrading my house so that every room in the house has an RJ-45 connector and CAT6 cabling to ensure that I can both provide data and power devices in every room of my house. 

I've also begun to use my security system now as it's all up and running with sensors all around the house that immediately trigger if someone enters the house.

All in all, the house is much safer, saves more energy, and allows me to access and control it from anywhere.

At 30 years old, I'm hardly a young driver, but I have at last passed my driving test.

I first started to learn in 2013 when I was 21 but unfortunately had to stop due to issues with my instructor. My next instructor, Miranda, was friendly, supportive and very calm which really helped me. I took on Miranda after one and a half years of not driving. I then sat my first test in January of 2016 which was a pretty good result but still failed. I got no minors and a single major which my instructor said was something that I'd never do but could see it was down to stress. I left driving for a while.

Fast forward to 2019 when I decided to pick up driving as I had a little more time and money. I went for three lessons with an instructor but decided the best way to go was to save money and practice with my mum. I started that in late 2019. Unfortunately, COVID came along and I also needed to now redo my theory test but it was delayed and delayed by months at a time. I eventually got my theory rebooked for December 2020 and passed again. Next was the driving test, which I ended up booking for May 2021. Unfortunately, COVID affected this too, with my test being postponed to mid-July - a time which actually was very unsuitable for me. I then got it rebooked for September of 2021, only to get COVID myself. It was rebooked for November, again unsuitable for me as I was still struggling with COVID.

I managed to get it booked for February 2022 and felt really ready this time. Unfortunately, I failed. And it was so silly. Two minors and one major. And the major was for the emergency stop and if I'd been a half-second quicker I'd have passed. This was unfortunate and it really upset me because it was a silly mistake and one that I could have fixed easily.

Now, on the 17th of May 2022, still feeling ready to go for it, I passed. I got four minors, all of which were very minor and minors I was very aware of after but I felt like I deserved to pass anyway. I'm very happy that I've managed it at last! 

Recently I have found that some of the DIG tools out there are just too raw in their results and they've not been sanitised correctly, or provide too much information. So I've developed a new DIG tool on my website in the Dev Toolkit to help with this. You can find it below.

DIG Tool

Two years to the week after opening my jamiebalfour.scot domain for the first time I have decided it's time for a completely new domain.

My brother and I have been speaking about having one domain which we share but each have subdomains on, so without further ado, let me introduce the balfour.scot domain and the jamie.balfour.scot subdomain. jamiebalfour.scot will now redirect to my new domain automatically. This process will take a while to complete so you'll have to bear with me whilst this happens.

Further, my new email is just jamie@balfour.scot which is much cleaner.

As of today, you can download ZPE 1.10.4 from my website. This version includes passing by reference and by value and not just one or the other. Although there are not a ton of features in this version, the by reference and by value update is one of the most significant updates yet!

CSS Tricks, one of my favourite websites for non-standard CSS ideas, is now going to be acquired by DigitalOcean. I mean this is big news, I've been using DigitalOcean since about late 2017 and they've been amazing. It's actually good that it's DigitalOcean and not some other company that couldn't be trusted to make a good job of it.

You can read more on the CSS Tricks website here.

Exceptional Elephant brings a big new feature that really makes the new version more powerful than ever. 

ZPE had for a long time relied heavily on using by value passing of variables to functions, both internal and externally, and this became even more confusing when the new reference types came to ZPE (aka ZPETypes). For example, the list_add_element function would actually modify the original list passed into it, whereas other functions would simply copy the list and change it. No longer do any of these predefined functions copy the value passed but will always modify the version passed to it.

So, passing by reference is very important. But then so is passing by value. Now you can specify this by running list_add_element(&$l) to pass by reference, passing the original list through or by value by simply writing list_add_element($l). It's also important to note that with any programming language and runtime, and not just YASS, that passing by reference is considerably faster.

I've been wanting to this feature into ZPE for a good few years but it was tricky. Since ZPETypes have been included it's been much clearer to me that it was easy enough to do.

Over the last six or seven years, many of my followers will know that I have been developing ZPE and its accompanying YASS language. They've come a long way since the beginning both in terms of speed and performance. ZPE is 50x faster than it was when I first developed it (version 1.2), and 10x faster than it was five years ago. These are crazy stats when you think about it. But on top of all of that, hundreds of features being added makes it bigger and bigger.

ZPE and YASS functions work on many operating systems. They are inherently designed in the underlying implementation to work on each operating system (and yes, I do have to build separate ones for each operating system) which of course requires a lot of testing.

At the end of 2020, I separated the Windows library from the main ZPE package, thus taking away the Windows operating system elements from ZPE. This included writing to the registry, a different beep function compared with Linux and macOS, as well as things like Windows Jump Lists. Generally, the move has made sense. 

So without further ado, I'm really pleased to announce there will now be three separate libraries for each of the main operating systems that ZPE is designed for:

  • lib_windows
  • lib_macos
  • lib_linux

What this means is that these libraries will directly overwrite parts of the ZPE package, such as for Windows the beep function, on macOS the menu bar will be able to switch to the macOS system menu and on Linux there will be more support for Linux command line. These libraries are going to be developed bit by bit over the next few months to make ZPE even more specific to the operating system.

Last night I finished working on ZPE 1.10.2, the latest version of ZPE. ZPE has been the centre of focus for me recently due to the need to redevelop the editor from scratch. I say this because the editor used JavaFX and since the decision to remove JavaFX from the JRE in the latest versions, I decided to make things easier and go for a simple Swing interface. 

Swing didn't work too well the last time I used it to build the editor, in fact, download an old version to see what I mean. But the new version is so much better. There are still one or two features missing from ZPE's editor that were featured previously but they will come soon.

Powered by DASH 2.0