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

Over the last few days, my work has been focused on finishing off the BalfVote website. 

For those who haven't been keeping an eye on my blog, BalfVote is now available to use freely at balf.vote. The new system allows you to create simple polls that users can access from their devices. It's part of my WISP project and the actual interface that was developed as part of my website has no actual styling. This is why I use this in my presentations - it fits with the theme. 

It's still in very early beta stages but the whole interface from the graphs and the questions works 100% - it's just the creator that still needs work.

In the November 2022 release of ZPE, sockets will be available through the new Socket object! This has been a long-requested feature that was first proposed but scrapped when ZPE became object-oriented. Further to that ZPE 1.10.11 is bringing back the UI object due to issues within the plugin version.

ZPE 1.10.10 already brings the new MQTT object which will soon feature subscription as well as publishing (probably in December). The new MQTT object is actually really awesome and it allows me to automate my house even further than before with ZPE. As always, the core principle behind ZPE is to make features like MQTT more accessible and easier to use, and the socket is no different. Instead of requiring 20 lines of code, ZPE's socket implementation requires just two lines of code.

ZPE 1.10.10 is considerably larger at 1.2MB instead of 960KB as it would have been if not for MQTT. It's still reasonably small, but expect ZPE to get bigger as new features like MQTT get added.

ZPE 1.10.10 will be released today at some point, and the headline feature is MQTT support. 

In case you didn't know, MQTT is built upon the TCP/IP stack and is intended for direct communication in the form of a publish and subscribe system. ZPE now has the ability to publish (not subscribe yet) messages to an endpoint and is fairly straightforward to use (unlike the underlying implementation). 

To use MQTT in ZPE, one uses the MQTT object which encapsulates several built-in functions (connect and publish). More will be published after the release today on using MQTT.

You could write the following code (assuming you have cached values already setup):

YASS
$topic = "comms"
$message = "Hello world!"
$mqtt = new MQTT()
$mqtt->connect("192.168.1.2", 1883, read_cache_value("MQTT_USER"), read_cache_value("MQTT_PASS"))
$mqtt->publish($topic, $message

Tonight I managed to recover my home server after it encountered a fsck issue. I'm going to say, when I had this issue I shouted the word it resembles. However, it was easy to recover from, since I DD my machine every day onto a separate location. The problem is, that downloading the image, for backup purposes, took forever. This is because the image is 40GB. 

My network is a mix of gigabit and 2.5 gigabit Ethernet and with my new gaming PC will be even more 2.5 gigabit. This causes slow downs for example when transferring from the home server to my MacBook (the server is only gigabit).

However, over the next few months, I will begin the transition to 10 gigabit Ethernet across the house for certain things like my PCs. I will be documenting this as I go along with it so follow my blog to find out more!

ZPE's codenames have been a continuing tradition, and since I announced version 1.10.x codenames I have been following a once a month release cycle, the same will happen with ZPE 1.11.x.

However, there will be a change. Instead of just being given a codename, each version will ditch the version number from the name and will instead use the codenames as the version. The version numbers will still increment, but will not be as prominent as the names. The names are yet to be decided but the first version, aka ZPE 1.11.x will be called ZPE Omega. ZPE will also keep codenames between versions in the future, so ZPE 1.11.1 may share a codename with ZPE 1.11.2 and so on. 

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.

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.

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.

Powered by DASH 2.0