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

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.

After seeing someone else create a tier list for Pokémon games, I decided to do one myself.

I have my justifications below:

  • Pokémon Red and Blue being the first games, deserved not to be down at the bottom of the list, but were so broken and full of bugs (like Focus Energy not working as it was meant to) that they couldn't go higher than D.
  • Pokémon Yellow: a more refined version of Red and Blue, yet still full of bugs and the fact you couldn't evolve .
  • Pokémon Gold and Silver These were some of the most important games in my childhood. These refined the games to be games that I felt were worthy of getting into trouble in school to play! The improvement in the quality of the games, the introduction of breeding and egg moves, the introduction of more Dragon moves and the Dark type (as well as the Steel Type) and the improvement in the graphics made these games some of the more important games.
  • Pokémon Crystal I couldn't initially play Pokémon Crystal due to having a Gameboy Pocket when the game required a Gameboy Color. But when I got a Gameboy Advance, I could enjoy it and found it a really good game. Several minor improvements to Gold and Silver were brought in that made a difference. 
  • Pokémon Ruby and Sapphire these games are easily the most important games personally, but generally, they made some of the biggest changes and improvements to Pokémon as a whole. The introduction of the amazing double battle mechanic, abilities, natures, and Flygon (and many other Dragon-type Pokémon) was instrumental in my love of the games. 
  • Pokémon Colosseum this was an absolutely brilliant game that I still go back to over and over again because it's so replayable. The game had by far the best soundtrack of any Pokémon game at the time when it was released. 
  • Pokémon LeafGreen and FireRed these games were some of my favourites when they came out. They introduced many Pokémon from previous games that had been omitted from Ruby and Sapphire (and they allowed you to trade them back). These became my main games for a good two or three years. I first bought FireRed from Japan as I urgently wanted to play it. I still have some of my Japanese Pokémon on my Pokémon Home, too! These games also brought about wireless communication in Pokémon for the first time. There were just so many things these games did correctly.
  • Pokémon Emerald while a minor refinement that mirrors how Crystal changed Gold and Silver, Emerald was a very enjoyable game, focused more on Rayquaza from the Weather Trio. I completed the game once, but sadly, my cartridge developed a fault and unfortunately got stuck after catching Rayquaza and then corrupting the save file. 
  • Pokémon XD: Gale of Darkness was one of the games I didn't acquire until way after. I got XD in 2015 when my brother and I decided to trade GameCube games. I haven't played through the whole thing, unfortunately, but it feels like Pokémon Colosseum with a new story, and that isn't a bad thing. It is an enjoyable game.
  • Pokémon Diamond and Pearl by the release of Diamond and Pearl, I had, unfortunately, lost interest in Pokémon. I attempted to rekindle an interest in the series in 2010 with two of my friends, picking up Ruby and Sapphire again for the first time in 6 years, but sadly, I could not get myself back into it. As a result of this break, I missed out on Diamond and Pearl's release despite being hugely interested in them (I remember reading a copy of Games Master magazine about the new games and was hugely interested). I got the games in 2011 as a result of this.
  • Pokémon HeartGold and SoulSilver I liked Pokémon Gold when I got it in 1998 because it was what was available at the time, but returning to the re-releases in 2011 (I didn't get the games when they were released due to being out of Pokémon) was difficult, and I don't really know why. There were tons of things I liked about these games, but it was a game that was insignificant to me as I was really just getting back into Pokémon. I never found the story hugely interesting in those games, and it felt like the story was still very limited in this game, too.
  • Pokémon Black and White These two games got me back into the series after not playing Pokémon properly for almost seven years. It was a time that was particularly difficult for my health, and I was suffering from severe depression as a result of it. Black and White bring back lots of bad memories for me, but they also were there for me when I got down and did actually help me get through a lot of that stuff. I think Black and White deserves a D rank because it made significant steps up on the game's storyline compared with previous games. Also, several of my favourite Pokémon were introduced in this game. I got Pokémon Black at the end of 2010. I rate the game badly, however, mainly due to the introduction of things that ultimately felt shoehorned in - for example, triple battles and rotational battles. 
  • Pokémon Black and White 2 I owned both games and really enjoyed them, too. However, the games were fairly insignificant, and I felt they were just remakes, or rather, how Black and White could have been if DLC existed. 
  • Pokémon X and Y while these games received a lot of criticism, they were hugely significant, in my opinion. This was Pokémon's first appearance in a proper 3D environment. They were the first games in what I like to refer to as the gimmick line, adding a feature and then removing it one generation later. In X & Y, the gimmick that was added was Mega Evolution. It was also the best gimmick feature that was added. 
  • Pokémon Omega Ruby and Alpha Sapphire were the best re-releases of any game in the group. I still have them as my favourite Pokémon games because they were remakes of my favourite games.
  • Pokémon Sun and Moon were two of my least favourite games in the series. These games nearly put me off Pokémon again. The things I didn't like about the games were big as well. Firstly, the lack of gym battles was really upsetting, and the new system wasn't great. The other reason was that the new Pokémon introduced was really boring. Whilst the previous generation, generation 6, introduced several of my favourite Pokémon, including Dragalge and Skrelp and Noibat and Noivern, this generation only gave me Kommo-o. It also gives me Drampa, but I don't like him (my friend originally pointed out Drampa to me, saying I wouldn't like him. How right he was).
  • Pokémon Ultra Sun and Ultra Moon were just the same, and whilst they did improve a lot, I got sick of these games quickly due to the original games.
  • Pokémon Let's Go Pikachu! and Let's Go Eevee were again very significant in the history of Pokémon. I went for Eevee this time. I really enjoyed playing through these games as they were the first home games console releases since Pokémon XD. These games were significant as a step toward moving Pokémon games away from the small screen to the big.
  • Pokémon Sword and Pokémon Shield were two of my favourites. These games were the first real Nintendo Switch games, and although they were plagued with the problem of Dexit (the lack of Pokémon from previous generations appearing in the Pokédex), they were a fantastic release, despite all the concerns people had for their release.
  • Pokémon Brilliant Diamond and Shiny Pearl were again two of my favourite releases. Since I didn't play the original games back when they were released and played them after their release, these games worried me slightly. They worried me because I hadn't played the original games, and they might not have the nostalgic feel that games like Omega Ruby had for me. Needless to say, these were some of the best games due to their excellent story and classic feel. I'm so glad I got Pearl since Palkia is one of my favourite Pokémon now as well.
  • Pokémon Legends: Arceus is a game I never got around to even opening, unfortunately.
  • Pokémon Scarlet and Violet are the current games when I wrote this. Unfortunately, they are very buggy games, and their story isn't great either. While the developers continued to bring more and more Pokémon to these games, they still lacked many of my favourites. There's not much more I can say about these games. They were enjoyable enough to play through, but the glitches and bugs seriously impacted how I felt about the game.

And that's it! 

Pokemon icons created by Those Icons - Flaticon

Over the last few weeks, I have been working tremendously hard on the DragonDocs Engine, updating it from version 2.0 to a modest bump up of 2.1. The new version allows image uploading and has worked really well over the last few days since I brought it in. But DragonDocs version 2.2 is already under development, with the DragonDocs AI Engine being the core feature of this iteration.

In fact, I trialled out the DragonDocs AI Engine today, and it works so well! This is still in the experimental stages and is being looked at in-depth for the next version.

As part of the WISP, I intended to release a full UI package called BalfUI. BalfUI will include both BalfPick and BalfSlider and will be fully modular - using my website, you can pick exactly what parts you want and receive a minified package of CSS and JavaScript containing just what you need. This was actually requested early last year, and I had originally considered it but decided against it. BalfUI will also include a flurry of other things, including BalfRibbon; I'm hoping for an early release of my Phoenix Font and other UI elements.

All of my projects are open source and hosted on GitHub for anyone to use. BalfBar also features a menu generator on my website to simplify the generation of the HTML.

Powered by DASH 2.0