To use this website fully, you first need to accept the use of cookies. By agreeing to the use of cookies you consent to the user of functional cookies. For more information read this page.

Personal Blog

It's about time. ZPE has 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>
<html>
  <head>
    <title>Test ZPE</title>
  </head>
  <body>
    This is <?zpe print("Jamie") zpe ?> here.
    <?zpe
      for($i = 0; $i < 100; $i++)
print("<p>Hello " & $i & "</p>")
end for zpe ?> </body> </html>

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, ZPE 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!

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:

2018 has been an eventful, but great year. It's always sad saying goodbye to another year, but it's always nice saying hello to a new year.

With this post I just want to wish you all a very HAPPY NEW YEAR for 2019!

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.

When I think of 2018, I think of my failures to achieve what I wanted. However, there were far more positives this year.

Let's start with my favourite thing to talk about on my blog, ZPE. ZPE went through a major transformation this year. In fact, 2018 was, without any doubt, the biggest year for ZPE improvements. It became an object-oriented language more than ever before, native methods can be used within objects, it became possible to make ZPE dynamically typed, it got a new name, and, perhaps the best addition for the future, the internal updater was added. There's more about what happened with ZPE in 2018 here.

Dash got a big update this year too. This update meant that one Dash installation was all that was needed to manage multiple Dash powered content systems. It also separated categories from posts, so a category can be easily updated across the whole system.

Before 2018, I was a freelance web developer. I got the occasional client here and there, but it wasn't possible to really dedicate that much to this and I couldn't charge what I really wanted. This year I went ahead and created my own company, Jambour Digital. This year was good for my company as two websites were launched and the older websites were all refurbished with the new Girder framework. Further to that, Dash actually got the Girder framework added to it.

Then there's teacher training, my life goal. Teaching has, so far, been fun but very taxing. It's probably too early for me to tell, but it might not be the right thing for me after all. This is funny since I've always wanted to be a teacher, but now that I have been I'm not sure about it. The great thing is that now I have tried it so I can never regret not trying it. 2019 might see me seeking a new industry altogether. I've realised I'm not as capable as I first thought and that actually the side effects of 2010 may have hit me harder this year than ever before.

Other things that happened include the release of Super Smash Bros Ultimate and the announcement of Warcraft Reforged. Oh, do not forget Pokemon Let's Go Eevee and Let's Go Pikachu, both of which were released this year and were heavily criticised by some people I know, but ended up being one of my favourite games of the year.

Even though it has had it's ups and downs, I'm happy to say that 2018 was a good year, not a bad one.

Again, it's a sad moment when we say goodbye to 2018 in a couple of hours but a happy moment to say hello to 2019.

Over 2018, ZPE has improved more than ever. Here is just a sample of the new language features brought through the year 2018:

  • Performance is better than ever.
  • The syntax is cleaner than ever.
  • Its name is now a recursive acronym and much easier to say.
  • It's more object-oriented than ever before. Object inheritance was added. Objects performance has been improved.
  • TYPO was finally brought to the language.
  • Native methods for objects were brought to the language.
  • Error objects were added.
  • Pre-increment and pre-decrement syntaxes were changes to be in line with other languages such as PHP - this was one of the most requested features back in the early days of ZPE. 
  • A new FOR LOOP, the FOR EACH IN LOOP was added.
  • The circumflex (^) for representing the power value, e.g. 5^2 is now part of the syntax
  • More syntactic sugar was added to the compiler, such as the IF...THEN statements. The fat arrow syntax for lambda functions was added. elseif can now be written as else if as well.
  • Value caching with the cache_value and read_cache allow programs to save information for later.
  • If statements can have values assigned within them. E.g. if(($v = 10) == 10) 
  • Python-style fixed arrays have now been added
  • The interactive interpreter has been improved by miles - it performs better and doesn't stop when it has an error.
  • Further refinement to 'everything is a function' strategy where the whole program runs within a function has been furthered.
  • The internal updater has now been added

What's still left for development in 2019 then? Well, the answer is that there is a ton of stuff still to be done. For a start, I'd like to improve the performance of the LAMP parser considerably. There is definitely scope for improvement there. It will be a drop in replacement for the current LAMP parser too since the LAMP parser implements the ZPELAMP interface.

ZPE will also get the automatic update feature brought to it, so it will inform users when there is an update. The GUI object is also going to be one of the main focuses for the next version of ZPE. As well as that, ZPE will move further to becoming an object-oriented language by furthering the number of object-based methods within the language. 2018 also added a Python transpiler, I will continue to work on that and hopefully finish that.

What happened to ZPE 2.0?

ZPE 2.0, the C++ compiler, interpreter and runtime that was designed to replace ZPE 1.x was going to take too long to develop and I'm quite happy to work on ZPE 1.x for now as my main project. In the future I will possibly continue to work on ZPE 2.0 again.

A long-awaited feature in the ZPE was the request for an updater built-in to the interpreter and parser. So now with ZPE 1.6.8.1 you can, although a minor update, it is actually a big update for it.

This is a long awaited feature and it's very easy to do. ZPE 1.6.8.1 is now also available to download from my website as of today. To run the update, simply type:

zpe --update

By reference-style variables have yet to be fully implemented and are partially implemented in ZPE 1.6.8.x. They've been disabled within the release versions.

With 2019 just around the corner, ZPE 1.7.0 is also just about ready to be started and readied for release. ZPE 1.7.0 is bringing some performance improvements and one or two new syntax features that aim to make ZPE even better. ZPE 1.7.0 will also bring an automatic updater, expanding on what ZPE 1.6.8.1 brought. Unfortunately, ZPE 1.6.9 which I had hoped to bring out before the end of the year, has been scraped due to the lack of time.

I hope all my readers have a Merry Christmas for 2018! Best wishes to all!