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 was reading through parts of my blog looking for one specific post and came across one of my favourite posts on my website. I'm referring to this one here. This post discussed a form of code optimisation that can be carried out before compilation in some languages including ZPE/YASS.

Specifically, this post discussed performance differences between using variables where a length value (in this case the number of items in a list) is stored in a variable versus inline function calls to check the size of that list each iteration of the loop. It is understandable that the former would have lower latency and indeed lower memory consumption. 

After reading the post again, I thought I'd try it with the newest version of ZPE. At first, my thoughts were it was going to be slower because of the compilation time being increased to allow for compiler optimisation that the new ZPE offers. I was wrong. 

ZPE 1.8.5 is considerably faster on both for loops provided in the example, performing only slightly better in the user optimised version. 

Results for the first for loop in ZPE 1.8.5 were:

real 0m0.454s
user 0m1.016s
sys 0m0.118s

Compared with 2016's 1.4.2E, which got:

real 0m2.071s
user 0m2.914s
sys 0m0.455s

It's taken a while for me to finally get here, but ZPE is finally adding further optimisations for mathematical and logical operations. 

For logic, one optimisation that has been highlighted as a potential area for improvement is the use of nested if statements and optimising them with else ifs instead.

For mathematics, it will include an optimisation that compiles static operations such as 1 + 5, but it will also look to improve the performance through the use of variables within mathematics. 

Since ZPE has begun to include optimisations since ZPE 1.7.8, it has been a major focus and major shift to improve the performance of compiled scripts. I am also looking to improve the performance of web-based scripts and adding in the ability to compile them too.

LAME2 is also under development, designed to improve performance of LAME which itself improved performance over LAMP this time last year. LAME2 will also embed its own optimisations. 

Also, I thought I'd take this opportunity to inform you of my recent use cases for ZPE since it now responds to webhooks much more efficiently. My most recent ZPE project has been on the home Raspberry Pi, which is set up to respond to web requests and manage them accordingly. We are now using ZPE within our smart home setup and I'm very happy to show people how it works. If you are interested, please contact me via email.

Hello folks, I hope everyone is okay and not as fed up as I am with everything going on in the world at present!

Today I was thinking about something that I use every day - switchable graphics. See in my MacBook Pro I have an Nvidia 750GT - a decent dedicated graphics card that can run some games well but has never been used for gaming. In fact, my dedicated card only gets used for graphic and video editing on my MacBook and therefore remains cool and quiet using the Intel Iris Pro graphics. The fact that my computer automatically switches without me even noticing (other than the notification I have setup) is quite truly amazing.

So, what about switchable memory? Have a low power implementation such as LPDDR3 and then high-performance DDR4 as the fast memory. It wouldn't be a particularly good idea in smaller laptops but in a laptop such as 15" machine such as my MacBook Pro it might be an excellent idea. Something like this could help a device such as the Nintendo Switch, a lower power RAM for on the move then a powerful implementation that would be activated when it is docked.

Of course, there are issues with this concept of switchable memory. The main one that comes to mind is how do you keep them in sync? If one memory is to be turned off, you need a fast bus or lane to transfer the data from one memory module or type to the other. This could also end up using a lot of power. 

This is a just a thought...

Visual Basic was the first language that I learned all the way back in my early teens. I built some amazing things with it including my own Photoshop program and a web browser with many big features. But now Microsoft has declared the end for it. 

Read more below:

https://www.thurrott.com/dev/232268/microsoft-plots-the-end-of-visual-basic

Posted by jamiebalfour04 in Tech talk
microsoft
visual basic

Many of you will know I was a bit of a geeky kid who enjoyed lots of things that involved computers. One of my passions, when I was younger, was writing books about technology and computers.

I wrote my non-fiction first book in my first year of school and it came to 180 pages. It was based on what I would be studying a few years later, Standard Grade Computing.

In my fourth year of school I began to write my second book (technically the third since my second did not amount into anything), and this book was used for the training department in what I was trying to make into my own company (Balfour's Business). The company never became anything and I ditched it for Jambour Digital in 2017. The book was 382 pages long!

I've now started a new book called Complete Computing. This time Complete Computing will be made publicly available. This book is covering S3/Level 3/4 Computing and covers several different topics. CC is based around the S3 course at the school I teach at mixed with the course at another school which one of the co-authors works at. 

Oh yes, and I didn't mention that this time to assist with the writing of the book I have encouraged someone else to co-author the book with me. 

The ultimate aim of this book is to provide a resource for Level 3/4 Computing covering a wide range of topics that can be used. Whether I intend to publish it or not is still undecided. 

Posted by jamiebalfour04 in Teaching
complete computing

A major part of my childhood and the early years of the last decade was developing my own software applications. These include programs like Painter Pro, Wonderword, Data Project, Cobweb and more. I still have all the code for them on my system but haven't touched them for years. You see the problem is they were only designed for Windows machines, not Macs and Linux machines. This is because they were written in a combination of C# and VB.NET.

As a result, they've remained untouched for a long time. One of my last innovations in them was that of BlackRabbit Script - a language that could directly communicate with the applications it was running in. It was quickly replaced by the cross-platform, Java written ZPE. 

ZPE has obviously been a much bigger hit and also a much bigger project, but it's also hundreds of times faster than BlackRabbit. 

So I thought I would try something. What if I were to get ZPE in place of BlackRabbit in those older applications? Would it work? This is definitely something I'd like to try and will be trying tomorrow and will be reporting back on here.

In recent weeks I have been integrating ZPE into my smart home equipment, helping me set commands to perform certain things that would otherwise be very difficult. 

One such feature of ZPE that I find both useful and efficient is that of shutting down and starting up my PC. This is all done from our smart home's Raspberry PI which sends out wake on LAN requests and ZPE shutdown requests. ZPE acts as the webserver to our house, too. The web server responds to webhooks from IFTTT and deals with them as appropriate, making the PI respond based on the hook.

ZPE 1.8.1 also includes proper encryption between the server and client instances. Both the ZPEClient and ZPEServer have been rewritten as well and are now the ZENClient and ZENServer. The improvements to these not only make them faster but more stable.

ZPE 1.8.1 will include a few more features and will hopefully release on Sunday.

ZPE is now coming up for it's five year mark, but it's actually stemmed from something I started 8 years ago. 

In this article, I am looking back at ZPE through the years, asking myself questions.

Why did I start ZPE?

BlackRabbit Script, the predecessor to ZPE, was written only for use on Windows computers which were originally my own development base. It was written in C#.NET. When I learned a bit more about parsers and making them efficient I decided to rewrite the BlackRabbit Script parser in C#.NET using the new knowledge I had obtained. It received a decent performance gain. In 2015 I decided to give it a go building it from scratch as part of a university project. I gained huge performance improvements.

What was the biggest hurdle for ZPE?

There were two very big hurdles when developing ZPE. The first of those was the mathematical parser. I knew that writing this in an efficient manner would be difficult, however, not so difficult that I would need to rewrite the mathematical and logic parsers three times to get them right.

The second hurdle was that I wrote BlackRabbit Script using my own class library that I began writing when I was 13 (in my second year of high school). It contained a bunch of different tools that formed the basis for BlackRabbit Script and made it really easy to develop functions for it. Unfortunately, that class library is not available in Java and since ZPE was rewritten in Java I had to redevelop a bunch of those features for the basis of ZPE. When I moved from BRS to ZPE, BRS had around 100 built-in methods. ZPE only got this as of about version 1.5.x. 

What is my favourite feature of ZPE?

The web parser and ZEN. ZEN is a bunch of networking features for ZPE that make it well worthwhile. It also allows ZPE to act as a web server and it's a rather efficient web parser. ZPE powers my webserver at home as it allows me to easily create plugins for it to automate things around the house.

What is coming up for ZPE?

There's a bunch of new performance improvements planned for ZPE that have been in the works since about version 1.5 that are finally going to get the time needed. Version 1.8 will start with version 1.8.1 (Quinn) which will develop the foundation for these improvements to go through.

There will also be improvements to the MySQL library over the next few months.

Primrose Lake, also known as version 1.7.12 will be the last version of version 1.7 to be released. Despite this, it's a huge update. 

1.7.12 not only brings single line if statements using the if...then statements but it also brings performance improvements in two areas. 

The first area for a performance improvement is the When-Is statement (aka the case statement). The improvement in performance comes from statements that are long in size but unfortunately smaller statements get a performance penalty. For performance gains statements need to be around about 6 or more options. 

There have been a few parser improvements too.

But the most significant change is the way in which libraries are now imported. Any ZPE compiled library is no longer imported at startup and is now deferred. They are now imported only through the import command. 

ZPE 1.7.12 is now available from my Download Center.

I was talking with a friend the other day there about the topic of limiting the frames per second (FPS) in a video game when playing on your PC. The argument didn't end with a much clearer understanding than was originally the case and neither side won the argument. 

Many people do not realise how important limiting the FPS in a video game can be for performance. Think about it this way, every piece of information a computer's graphics card needs to produce is more work for the computer. 

If a computer monitor refreshes at 60Hz (around about 60 frames per second) then running 120 frames means that 60 of those frames are wasted. This is, technically, how V-sync works as well. Limiting the FPS allows the GPU to work on the next few frames without filling the GPU doing overtime. 

What this means is that your computer, which could be doing other things like calculating positions of units in a game or something, cannot be done until those frames have rendered. This is wasted CPU and GPU resources.

So go on, try limiting your frames per second.

Posted by jamiebalfour04 in Tech talk
fps
gpu
performance
Powered by DASH 2.0