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

I really wanted to simply outline what I thought of the latest Nintendo Direct, which blew my mind.

There were three staple elements that made this Nintendo Direct so amazing. Those three announcements were:

  • The Nintendo 64 games - I was over the moon to see a good old classic, Pokemon Stadium, is coming to the Nintendo Switch, and I was just as over the moon with the announcement of Pokemon Stadium 2, but I was even more over the moon with the announcement that Goldeneye was coming to the Switch also.
  • Pikmin 4 - I've enjoyed Pikmin since 2002 when the first version came out - heck that feels a long time ago as I was still in primary school! Pikmin 3 was one of my favourite games of all time - it was just an awesome culmination of a strategy game that works so well with a controller.
  • Legend of Zelda - I've always loved Zelda since OoT was one of the first games I owned. I cannot wait for another Zelda game. Enough said.

Let's be clear from the start, it was obvious that the native build of ZPE was going to have better performance, but I wasn't entirely sure of how much better the performance was going to be until I compiled the latest version and tested it.

The native version is considerable faster when it processed loops. Here is an example of a 100,000 iteration loop running on the Java version first, then the native version. Both are running on an M1 Mac with the native version compiled for aarch64.

And with the ZPE Standard Library the comparison is made even clearer:

Whilst ZPE native is faster than the JRE ZPE, it's important to know that its feature set is not complete. I am working on improving this and the native binaries may become the future of ZPE, but at present, they have bugs (for example the sound features do not work).

Performance is now gaining on that of PHP with loops in particular.

After 5 years of development, the Zenith Parsing Engine is now being separated from the main ZPE application. This will make it easier to write compilers using it. As a result, I also intend to make separate JSON, XML and CSV compilers based on this. 

The reason for this is that I feel the Zenith Parsing Engine could be better utilised in other applications than including the whole package.

The very first version not to include the parser natively will be version 1.10.9, aka Lusty Lion.

BalfVote is my latest addition to my WISP. Developed in a couple of hours, I developed a tool that I want to use in my classroom. Since I have already moved away from using Google Slides and to slides.com, which gives you much more granuallar control over the HTML and CSS on the pages, I have already made the change to a more consistent set of slides - all hosted on my website. I have also been creative with my interactivity in my lessons, for example in one lesson the pupils must provide the correct answer and when they do, the text box highlights green, whereas if they get it wrong it goes red. Other lessons have timers built-in to them, or quizzes built with BalfQuiz and much more. By having the ability to embed iframes and HTML I can do anything I want. 

As you'll know, being a dual-typed being, an educational practioner (aka teacher) and a computer scientist, I like to mix my skills together and come up with ideas that can really change and inspire children and over the last year my focus has been making my lessons more digital and more interactive. I mainly focused on moving away from standard PowerPoint based lessons, to more online tools such as Google Slides. I then opted to have much more control over my content so moved back to slides.com (I have been creating presentations with reveal.js since 2016). slides.com is only part of the picture as it helps me to make the slides and export them to HTML. I made a lot of the features I have in my lessons myself. And my slideshow player is where the magic happens. I have tons of features in JavaScript, CSS and PHP powering them. This makes my lessons consistent and very functional, but also engaging. 

This is exactly what BalfVote aims to do. By asking pupils questions regularly throughout a lesson I can guage how well the class is understanding a concept. Coming very soon is an option to have right and wrong answers too, which can make this more like a quiz. 

Head on over to balf.vote to find out more.

There are plenty more innovations like this coming, so keep an eye on my blog!

ZPE is now available in native format!

Unlike previous operating-specific versions, these are not bundles but are actual binaries. They are compiled from the original JAR using GraalVM and native-image to improve performance. As a result, they are considerably larger files but also faster than the previous versions. A Linux version will also be available very soon. The JAR version will continue to be available and will remain as the primary version for those wanting the easiest of the installations.

As for Windows, I'm not sure when it will be available, since I only have one machine running Windows and I don't intend to turn it on to solely compile ZPE.

BalfBar version 1.5 is a massive update, making performance improvements, changing the way it works underneath, and adding features that make it much easier to set up and more stable than previous versions.

Version 1.5's headline feature is that it removes animations from JavaScript and moves them solely to CSS. The other feature that is now completely departing is the hover class that is added to items. This was added to help support older browsers but also was used in the older versions to decide whether to keep the menu open or not. BalfBar now also adds a new menu_open class to the main BalfBar item which is added when a menu is opened. 

I have already deployed the updated version to my website, so take a look to see what I mean.

ZPE 1.10.8 is even faster than before! With new performance improvements and new features including TYPO v2.1 and typing within function declarations, ZPE 1.10.8 is set to be a big release. Data types have been added now to the stdLib to the functions that support it, but it became very apparent that multiple return types should be a bigger update than 1.10.7 was! 

How can we keep the performance high and yet add typing? Admittedly, every time a new feature is added, or a new check is required, performance takes a little dip. That is definitely true with anything. But performance can be made up elsewhere, and one of the areas where I have identified a performance gain is with the LAME evaluator and so I will continue to look into improving the LAME evaluator to make up for this.

Even without these improvements, or compiler optimisations, ZPE's standard library compiles and executes exceptionally fast, taking just 80ms to compile and run - that's very fast! 

Future plans for 1.10.8 also include auto prepending compiled files to make execution even faster. I will publish the next version of ZPE, which although will not be the finished version of ZPE 1.10.8, will allow you to test it out and I'll publish that today.

The ZPE/YASS compiler has featured support for typing of parameters for a long time, except it doesn't do anything. One could write something like the example below:

YASS
function test(number $s) {
  print($s)
}

test("Hello world")

And yet nothing will happen when it is given a string value instead of a number value. This is because, although it compiles correctly and is a well-formed ZPE expression, ZPE's runtime doesn't actually know what to do with it. 

Looking back, the way in which ZPE's function calls are made by placing parameters in an ordered set has barely changed and has stayed about the same since ZPE 1.3 when functions were properly introduced. 

ZPE also doesn't support return types. But it will very soon and the syntax has been decided (and included) already:

YASS
function test(number $s) : number {
  return $s + 5
}

Since the original method of generating parameters has been in ZPE and barely changed since 2015, it will be a rather big job to update this but it'll be worth it in the continuing move to making ZPE and YASS strongly typed. However, from ZPE 1.10.8 onwards, it will be possible to write programs that use strongly typed parameters and provide return types, they just will not do anything.

This morning I began thinking about how to make certain posts stand out from others. I call some of my posts personal treasures, for example, nobody is really interested in what I did on my birthday this year, but I want to treasure that moment forever and where better than my personal blog that has now been running for 12 years. 

So to make that post stand out as a treasure I wanted to make it stand out. I did this by applying my glow effect to it, giving it a gradient border as I have used across my website. 

With the latest minor update to DASH, this is now fully possible with the new classes option.

I turned 31 today at 10.30. It's been a really nice day, mostly, except for the fact that getting my new shed delivered resulted in my outdoor lights - which are less than a week old - getting broken. 

The day was generally lovely though. For starters, my mum took me to Costa for breakfast which was really nice and unexpected. We then went back to my place and enjoyed the weather from my garden for an hour or so and then my mum headed home. Mid afternoon my mum and my aunt came across to have tea and enjoy my garden with me before heading down to the Longniddry Inn for birthday dinner, which again was really nice.

And that was it, my 31st birthday! 

Powered by DASH 2.0