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

ZPE has continually improved to the point where LAME X2 has improved what I had always aimed to improve in the evaluator. As a result of this new improvement, I don't foresee any easy way to improve performance on the same level as I have recently. This has meant that over the last few years, performance improvements have always been minor (bar the latest update), and I foresee this being the future.

There are plans for more compiler optimisations, and many of the improvements focus on this and more efficient variable declaration and function calling. If you have any suggestions for improving the performance of ZPE, please let me know. 

ZPE and ZPE/YASS are both very mature now. Both are incredibly fast and have a lot of functionality and features built in. BlackRabbit Script was first conceived in 2008 but didn't become a proper language until after a rebuild of it with version 1.x was started in January 2011. This marked the first time the language was actually usable. This was known as Operation Foghorn. 

The initial release of BlackRabbit Script was in May of that year. It was baked into Painter Pro and Wonderword as a replacement for the Macro Scripting Interface Language they both featured (it was the basis of BlackRabbit Script anyway). The new BlackRabbit Editor Ultra Edition could interpret it separately from these programs. 

Looking back at the whitepapers I produced and shared via my website in 2011 brings a bit of a chuckle: Operation Foghorn's syntax was considerably different from the language developed for ZPE/YASS. Foghorn laid out what BlackRabbit became, and ZPE is built entirely on how BlackRabbit Script works. The language itself was initially known as BlackRabbit Script (BRS) before getting the name Zenlang and finally settling on YASS; a lot of what made Operation Foghorn still stands today. 

BRS was slow, though, and compared with ZPE, the interpreter was ten times slower! That's to say that the hard work involved in developing ZPE has paid off. 

Speaking of which, the latest version of ZPE can compile 900 lines of code and interpret them in less than half a second. I mean, that's fast!

The results are for ZPE 1.12.3 and LAME X2. It is much, much faster than previous versions of LAME yet fully backwards compatible, so no recompilation is needed. 

ZPE 1.12.4 will update the interactive interpreter REPL ZPE, particularly regarding autocomplete. This will lay the groundwork for the more significant update that will come later to make the interactive interpreter so much more powerful.

At the beginning of the development of ZPE/YASS, transpilation was one of the key features of ZPE. It worked in the first versions of ZPE, converting what was called Zenlang back then into Java, Python, and PHP. But since then, ZPE has evolved so much that it has become more challenging to continue developing these transpilers. 

Let me put this into context. Assume you have language A and language B. Language A could be a subset of language B in terms of language tokens (in other words, language A has every token that language B has and more). Transpiling B to A is easy. 

But now, let's pretend that language B has added some tokens/syntax that language A does not have. Now transpiling to A from B is not directly possible. 

This is where ZPE/YASS is, to some degree. Although ZPE/YASS is not a subset, and nothing is a subset of it, the languages have all gone down a tree in different ways and have different syntaxes. They do, however, have the same meaning. For example, Java and YASS have loops, if statements, etc. But ZPE/YASS is the only language out of the three above which features a all_true predefined language function. This means I need to develop a little library that goes with any Java code that simulates this function. Then, the same goes with Python and PHP. 

Ultimately, this is why ZPE's transpilers do not work any more. 

Finally, ZPE 1.12.3 has been released!

ZPE 1.12.3 is a significant update because it dramatically changes how LAME evaluation is carried out on mathematical expressions. It switches to a new method of parsing mathematical expressions, making them up to 4 times more memory efficient. To explain this, I have bulleted the different areas of improvement:

  1. It no longer modifies IASTs
  2. As a result of the previous change, it now no longer copies IASTs before attempting to parse them, making it both faster and memory-efficient
  3. It parses BODMAS statements in one single pass rather than performing four passes on a statement.
  4. It separates logical expressions and mathematical expressions further, making both faster.

As I have said, this is a significant update for ZPE that flushes out some of the bad things about the first LAME.

LAME X2 closes the bridge even further between ZPE Native and ZPE Java, as it brings in further optimisations that improve performance to a native level.

Enough said, really.

Tim Berners Lee, the man considered the father of the web, conceptualised the idea back in 1980, but it wasn't until 1989 (two years before I was born) that he came up with the solution we now know as the web.

Berners Lee suggested combining hypertext and the Internet for document sharing back then. Now, the web has become far more than this and, coupled with the Internet, has become a superhighway of information.

Over the next few weeks to months I plan to bring many more features to DragonDocs. The new features mainly relate to deeper integration between DragonShows (the new name for my slideshow engine) and DragonDocs. 

The following a list of different features that I know for certain I can implement (I want to record them so I can look back at them myself as well):

  • Live documents linked to a slideshow - allowing sections to be disabled temporarily and enabled when needed
  • A new quiz system
  • Linked DragonShows with the following features:
    • A pace matcher - keep an eye on the time in lessons
    • A messaging system from the show to the document
  • Deeper AI integration

These features are designed from a teaching point of view to give the documents more potential. 

ZPE 1.12.2 will be released later today with LAME X2. LAME X2 was conceptualised at the end of 2023 with a completely different thought process to how it ended up.

LAME X2 was initially planned to be lazy in evaluation, putting more strain on the compiler to perform some form of evaluation/optimisation on expressions rather than leaving it to runtime. This wasn't the best way to go about it. I devised a better way after sitting down with pen and paper this morning.

This new way of doing it leaves LAME as a runtime evaluator rather than what LAMP was that proceeded LAME. LAME X2 is now up to 4 times faster for larger sums. Check these figures for evaluating the sum '3 * (5 + 2) / 2 ^ 2' and displaying the result 100,000 times:

LAME: 14.37s user 2.62s system 114% cpu 14.775 total

LAME X2: 10.40s user 2.04s system 120% cpu 10.362 total

Counting on my Watch, I also got much lower figures with X2 compared with the original. 

The new version is experimental and will be bundled with ZPE. It can also be disabled, at least for now, using the property USE_OLD_LAME and setting it to true.

I am very proud to say there's a company whose products I believe are the best in the field.

That company is Reolink. Reolink is a new company to me and one that I only discovered about one year ago. I have invested heavily in Ring products but have encountered issues here, there and everywhere. This started at my parents' house when I bought them a Ring doorbell. From then on, I always stuck by Ring products, even when Amazon bought them.

I like Amazon, so don't get me wrong; they are a very reliable company. But their tech products scare me to some degree. And I say this because they could pull the plug or increase their prices at any time. I also feel that the Ring products haven't ever really fitted into my smart home ecosystem. 

I have spent over £600 on Ring products over the last year alone. This is a considerable investment, considering this is only a security system. This mirrors my original, somewhat poor investment in WiFi-based products for my smart home, which was quickly reversed with Zigbee and Zwave products. 

I've been trialling out my newish Reolink cameras today, and I've got to say I'm hugely impressed with them compared with the Ring cameras they are about to replace. For starters, the night vision is streaks ahead and very clear. The daytime camera is also miles better, with a much clearer picture than the Ring. The customisation in the app is also great too. But let's not forget, the main reason for getting these is that they are local. Yeah, that's right, everything they are doing right now is local. I plan to connect mine via FTPS to my local home server to make recordings and store them there. 

Over the last few days, I have been working hard to update a range of products and services across my website. This list outlines the updates:

  • ZPE ZULE updater (the system used to distribute updates for ZPE) has been fixed and improved
  • ZPE 1.12.2 fixes the updater system for the new (faster update system)
  • DASH 2.0 updater has also been fixed on both the server and product
  • The online YASS runtime has been fixed
  • The system status service is now more streamlined

ZPE 1.12.2 will be released in the next few days to address the updater issue. It will require a manual download to update it.

Powered by DASH 2.0