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

You can now download the latest version of my HAGGIS parser as a Java JAR from my personal Dropbox. This will also be a 'nightly' update in that all changes will come to this version since this is not the finished version. This JAR file also contains the latest version of ZPE, which is also nightly.

I hope some of you enjoy using it and that it is of some use to you.

Posted by jamiebalfour04 in Teaching
sqa
haggis
parser

A few nights ago I tweeted that I had begun work on a new HAGGIS parser. This parser is actually a YASS transpiler that transpiles from SQA HAGGIS to my own YASS before interpreting and running the YASS code. 

The parser will not only check if the code is valid, but it will also explain what is wrong with it. It will also be able to run it.

Whilst this is still experimental or incomplete, I have uploaded ZPE 1.7.2 with the new HAGGIS parser on to my server.

I hope people find this useful!

Posted by jamiebalfour04 in Teaching
sqa
haggis
parser

Constants have existed in ZPE since 1.2.01 of BlackRabbit Script, and were actually added as one of the first defined features. They've always had one problem since the beginning. They were interpreted, not compiled. With ZPE 1.7.2 some 5 years later, constants are moved to the compiler where they should be. They no longer have a syntax of #x = 10 but now require the define keyword in front of them:

YASS
define Jamie = "Jamie Balfour"
print(Jamie)
print(Jamie & Jamie)

Further improvements will make the LAME evaluator faster than version 1.7.1's LAME evaluator that completely redesigned the way evaluation works.

Starting every post about ZPE with using something along the lines of "without a doubt, the best version" is something that's pretty tricky, but since each version of ZPE is incrementally better than the previous, it makes sense. However, as great as the latest fixes and additions are, I'm not going to start the post with this line - you be the judge of that.

Anyway, I'm happy to announce ZPE 1.7.1, Kasba Lake, is now available for download.

Kasba Lake brings a huge improvement to the ZenithParser that was a complete rewrite of the basics of the parser to make it faster and more flexible and functional. The new parser offers the ability to include bound characters, return whitespaces and much more. The ZenithParser also compiles CSV, JSON and XML much faster than before which can be useful to people who want a fast parser in the native language of Java. As well as that, the new ZenithParser allows the programmer to define custom whitespace. Overall, the new parser is 10% faster than before, all while being far more memory efficient too.

Kasba Lake also brings by reference variables! This is a useful feature that has existed for a long time but not been fully implemented until now. By reference allows methods to modify an original variable, not a copy.

1.7.1 is also monumental for development by changing the core of the compiler and interpreter. When ZPE started in 2015 it was developed as the Zenith Engine. Since then things have changed and not only has the parser become publicly available, but the Zenith Engine has some exposed methods. Well since that all changed, the Zenith Engine no longer exists as one thing. Instead there is a completely separate compiler and interpreter (or runtime). This is more efficient and the new version runs much faster as a result of this. In 2015 since ZPE was only some 5,000 lines of code, the single design was easy to manage too, but even since late 2017 ZPE has over 30,000 lines of code, making management of the compiler and runtime tough. I had always planned to separate them but never got round to it.

Another huge change is that of the new LAME or Logic And Math Evaluator that replaces the LAMP or Logic And Math Parser which now carries out both the operation of parser and evaluation in one go. This is up to 3x faster in tests I have run than the original LAMP that it replaces but is 100% accurate compared. 

ZPE 1.7.1 also finally includes a web server. The ZPEWebServer is now ready for use and can act in the same way as PHP, performing very quickly. It's currently in the beta stages but all ZPE functions will work in it.

One last thing, ZPE 1.7.1 is about 15KB bigger than ZPE 1.7.0 because it has the original LAMP and the new LAME included. ZPE 1.7.1 can be seen as a hybrid between LAMP and LAME. LAMP will disappear in the near future and is now considered deprecated. You can currently use the LAMP parser if you wish by adding a setting to the properties file called use_lamp and setting it to true (ensure you lowercase both options).

The new version of ZPE is available at my Download Center.

As a vegetarian and someone who cares for animals, I'm always concerned about the alarming amount of animals that are consumed by humans every day. I'm not a crazy in-your-face vegetarian and I ask everyone in the world to stop now and become vegetarian, but I do have morals that relate to the treatment of animals. 

A recent protest carried out in Australia, which although I do not condone, I believe agrees partially with what I think. The protest involved them barbecuing a dog on the street and asking "If you wouldn't eat a dog, why eat a lamb?" which in my personal opinion is the reason to switch to vegetarianism. I asked myself this question when I ate meat, why do some rabbits deserve to be eaten whilst others do not and get kept as pets? (I had at the time and still have pet rabbits). 

Anyway, there was one thing that was said that stuck out from all the rest:

As humans, we instinctively feel compassion and empathy for animals, but we're taught that it's OK to enslave and eat some of them, without a second thought as to who they are as individuals.

Posted by jamiebalfour04 in Life
vegan
vegetarian
dog

It's about time. ZPE finally has a web server. A few years ago I added a communication server to ZPE (I think it was added in version 1.5.x) that allowed two or more ZPE programs to communicate using XML requests. It was great and it was reasonably fast.

But since then, ZPE has become so fast that I decided to write a server. This server uses ZPE as the main syntax for everything and because it's parser has been improved so much it's fast (maybe not as fast as PHP or C based applications, but it's good overall).

YASS
<!doctype html>
  
  
    This is  here.
    
  

ZPE has always been aiming to get to the point of doing this, since I consider myself more a web developer than software developer nowadays, I wanted to get something like this.

ZPE's main advantage is it's library of features, plus the ability to write extremely fast functions into the language  and it's already existing standard library.

To be clear version 1.6.x added the web parser to ZPE (the -w ZAC), but it wasn't fast enough for me until I updated the parser to version 1.3.

I'm extremely happy to announce after a lot of thinking and redesigning, ZenithParser 1.3 is now included in version 1.7.1 of ZPE and later. The new version of the parsing engine offers much faster and more efficient parser than ever before.

The results are in:

ZPE 1.7.1 with the old parser (version 1.2.1):

real 0m0.668s
user 0m1.390s
sys 0m0.152s

Compared with ZPE 1.7.1 with the new parser (version 1.3.0):

real 0m0.595s
user 0m1.270s
sys 0m0.136s

This may only be a 10% increase overall, but in reality this is big news. Minor improvements for the standard library run and compile but for interpreting JSON, CSV and XML files amongst other file types, this is an incredible amount of speed.

As mentioned over and over, the parser is by far the fastest part of the compilation process since the ZenithParser has been the main focus for years within ZPE.

Another major improvement in the ZenithParser 1.3 is it's ability to handle whitespace better and allow the compiler to re-add whitespace later. This has had incredible use within the ZPE web parser.

ZPE's implementation of by reference variables was a tricky one since the underlying Java does not give access to such a powerful tool.

Since version 1.7.0 Reindeer Lake, which was officially released yesterday, ZPE has supported by reference variables and will continue to make them more powerful. As these are new, there is currently no documentation on them. I will add some soon. In the meantime, I thought it might be a good idea to use my blog to explain these in more detail.

ZPE/YASS by reference is achieved with a ZPEVariableReference object which points to an actual ZPEVariable. Changes can be made to overwrite these in functions or to overwrite just their value. A change to the value will change the original value. Let's see it with code:

YASS
function main()
 
  $y = 5
  j(&$y)
  print($y)

end function

function j($y)

  $v = $y + 10  
  print($v)

  &$y = 10  
  print(&$y)

end function

Notice the changes between using &$ and just $. If using the $ syntax in an assignment, it will destroy the reference. Also note, the parameter name is still just $y, even though it contains a pointer. To access the parameter $y as though it were a pointer, it is simple enough to just put an & in front of it as shown on line 14.

That's all there is to ZPE by reference variables so far. I will continue to improve them over the next few versions so keep an eye out!

zpe
byref
by
reference
variables
1.7.0
1.7.1

So for a while, I have been contemplating a new computer. I originally considered a new Intel-based computer right up until the day I was going to order it in the form of an Intel Core i7 8086 - a limited edition version of the Core i7 8700K. But something had been annoying me for a while. The Ryzen that was almost 150 pounds cheaper was offering 8 cores as opposed to Intel's six. Better still, the Ryzen 2700 that I was always considering has a TDP of just 65W as opposed to 95W and uses 12nm fabrication technology compared with 14nm. On top of that, the Ryzen 2 range was only released in October of 2018, compared with Intel's that was over a year ago.

Intel's i7 9700K - their 9th Generation Core i7, has moved to have 8 cores at the same price, the catch is though, it drops Hyper Threading, so it only has 8 threads - the first time a Core i7 has not featured this technology. This has been reserved for the high-end Core i9. I was very saddened to see this, but the reasoning behind it is because Intel is still struggling to fabricate the 10nm FINFET transistors needed for the next tick in their tick-tock cycle and the only way to make a difference was to add more physical cores (and as a result drop the logical cores added by Hyper Threading).

All in all, that meant that the Ryzen 2700 seemed more suitable than any Intel available. So my decision was made when the 8086 went back up in price as the sale ended. I did a bit more research into the AMD alternative and I could get better RAM and higher performance RAM and still be about £70 cheaper than the Intel equivalent. 

So I am happy to say, that for the first time since 2007, I have purchased an AMD CPU. And I am proud to have done this because it took a lot of guts for me to do this. I was quite drawn in by the fact I may have owned a limited edition CPU and I was always drawn to Intel over AMD, but today I went ahead and broke out of that brand loyalty thing I have and said I'm going for an AMD!

I give you, the Red Revolution.

The Red Revolution replaces my Zebra X2, and also changes my nomenclature for my PCs. Now, rather than taking the names of animals and the first letter of the motherboard model, I am using the name of the CPU. The CPU, being a Ryzen, inspires red across the design, the GPU, my Radeon 7950 is also red, and despite everything about going for an Nvidia, will be replaced by a Radeon again due to the cheaper price and performance per dollar.

The Red Revolution is my first PC to be designed from the bottom up - that is that I have chosen each part from a design perspective (well performance was the first consideration, but design came next). I've never owned a PC that was made to look this beautiful either. With a red theme, the Revolution is, to date, my most attractive machine. Further to that, the refresh that the Revolution brings will allow me to replace my very old hard disk drives with much faster SSDs for my games. More space was one of the biggest considerations when choosing the chassis for my new machine and I didn't cut any corners when selecting my case. The Corsair 780T which replaces my old Corsair 600T has loads of room inside it (the 600T had plenty of room too, but not quite as much).

Although I originally just purchased a single 8GB strip of DDR4 memory, it is my intention to upgrade it to 16GB in the next week or so. After that it will also be possible to upgrade the system to 32GB if need be.

Only a few components remain from the previous Zebra X2, including my PSU which has been in every computer I have built since 2009 and first was added in the original Platypus now which makes it 10 years old now. My oldest hard disks were bought in 2005 and 2007 and are still running.

Below are some pictures of my finished build:

Posted by jamiebalfour04 in PC Modding
red
revolution
amd
ryzen
computer
cpu
gpu
psu

Here is my traditional post that I make every year that explains the last things that I do every year. So here goes. I know how pointless these posts are, but they're tradition so I'm sticking to doing them.

Also, I write these posts every year, probably just because I'm sentimental and enjoying doing this, you don't need to be interested at all in this post. 

Last meal I ate: Spaghetti Aribiatta

Last thing I had to drink with a meal: Pepsi

Last place I went out to eat: Goblin Ha'

Last film I watched: Star Wars: The Force Awakens

Last game I played: Age of Empires II

Last song I listened to: Pokemon Omega Ruby/Alpha Sapphire - Battle! Champion Music

Last person I have sent a text to: My mother

Last friend I have spoken to in person: Carol

Last TV programme I have watched: Scotland's Hogmanay Live

Last major purchase for myself: Super Smash Bros Ultimate

2018 was a strange year for me. I got into teacher training, formed my own business, Jambour Digital, but I also realised that maybe I don't enjoy teaching as much as I'd have liked to have and that it might not be right for me.

Powered by DASH 2.0